![](/img/trans.png)
[英]Caught “Specified cast is not valid.” error on receiving data in C# ASP.net MVC?
[英]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.