C# ASP.NET c指定的强制转换无效

C# ASP.NET c指定的强制转换无效,c#,asp.net,C#,Asp.net,我想从名为tenant的select查询中获取单个值。SQL Server中面向租户的\u具有单个字符值,该值为“Y”或“N”。当我执行它时,出现一个错误,即指定的强制转换在Char-tenant=Charcmd.ExecuteScalar;上无效;。 我不明白为什么它们都是字符,但却不匹配?这是我的密码 protected void DropDownArchitecture_SelectedIndexChanged(object sender, EventArgs e) {

我想从名为tenant的select查询中获取单个值。SQL Server中面向租户的\u具有单个字符值,该值为“Y”或“N”。当我执行它时,出现一个错误,即指定的强制转换在Char-tenant=Charcmd.ExecuteScalar;上无效;。 我不明白为什么它们都是字符,但却不匹配?这是我的密码

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;
        }
    }

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

即使SQL Server中的数据类型是单个字符,该类型仍然映射到ADO.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;
}
Sql字符等于C夏普字符串

根据这篇文章,没有C CLR等价于MSSQL字符。您的最佳选择是:

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

你试过把它串起来吗?字符串tenant=stringcmd.ExecuteScalar;一个小建议:用布尔值代替Y或N。谢谢!当它仍然映射到字符串时,它工作并且有点奇怪
Char tenant = Convert.ToChar(cmd.ExecuteScalar());