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