0

我想从名为租户的选择查询中获取单个值。SQL Server 中的 Tenant_Facing 具有单个字符值,即“Y”或“N”。当我执行它时,在 Char 租户 = (Char)cmd.ExecuteScalar(); 上显示“指定的强制转换无效”的错误。我不明白为什么即使它们都是Char也不匹配?这是我的代码,

protected void DropDownArchitecture_SelectedIndexChanged(object sender, EventArgs e)
    {

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database_Shared_NotebookConnectionString"].ConnectionString);

        string architecture = ((DropDownList)GridViewServer.FooterRow.FindControl("DropDownArchitecture")).Text;

        SqlCommand cmd = new SqlCommand("SELECT Tenant_Facing FROM tblArchitecture WHERE Architecture = '" + architecture + "'");

        cmd.Connection = conn;

        conn.Open();

        Char tenant = (Char)cmd.ExecuteScalar();

        conn.Close();

        if (tenant == 'Y')
        {
            ((DropDownList)GridViewServer.FooterRow.FindControl("DropDownTenant")).Visible = true;
        }
        else
        {
            ((DropDownList)GridViewServer.FooterRow.FindControl("DropDownTenant")).Visible = false;
        }
    }
4

4 回答 4

2

即使您在 SQL Server 中的数据类型是 single char,该类型仍然映射到stringADO.NET 中。试试这样:

string tenant = (string)cmd.ExecuteScalar();

conn.Close();

if (tenant == "Y")
//            ^ ^ make sure to change these to double-quotes
{
    ((DropDownList)GridViewServer.FooterRow.FindControl("DropDownTenant")).Visible = true;
}
else
{
    ((DropDownList)GridViewServer.FooterRow.FindControl("DropDownTenant")).Visible = false;
}
于 2012-11-28T17:20:57.523 回答
0

返回值似乎是不同的类型。我会说它可能是一个字符串,但可以肯定的是,尝试将原始结果存储ExecuteScalar在一个单独的变量中并使用调试器来确定它的 CLR 类型。

于 2012-11-28T17:20:43.537 回答
0

Sql Char等于C sharp string

String tenant = cmd.ExecuteScalar().ToString(); //Or
String tenant = (string)cmd.ExecuteScalar();
于 2012-11-28T17:22:23.873 回答
0

根据这篇文章(SQL Server DataTypes 的 C# 等效项),没有 MSSQL char 的 C# CLR 等效项。你最好的选择是:

Char tenant = Convert.ToChar(cmd.ExecuteScalar());
于 2012-11-28T17:23:28.320 回答