繁体   English   中英

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

[英]ASP.NET c# Specified cast is not valid

我想从名为tenant的select查询中获取单个值。 来自SQL Server的Tenant_Facing具有单个char值,即“Y”或“N”。 当我执行它时,在Char tenant =(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;
        }
    }

即使SQL Server中的数据类型是单个char ,该类型仍然映射到ADO.NET中的string 试试这样:

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

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

Sql Char等于C sharp string

String tenant = cmd.ExecuteScalar().ToString(); //Or
String tenant = (string)cmd.ExecuteScalar();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM