0

テナントという選択クエリから単一の値を取得したい。SQL Server の Tenant_Facing には、'Y' または 'N' のいずれかの単一の char 値があります。実行すると、Char tenant = (Char)cmd.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;
        }
    }
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

Sql Charに等しいC sharp stringです。

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

この投稿 ( C# Equivalent of SQL Server DataTypes ) によると、MSSQL char に相当する C# CLR はありません。あなたの最善の策は、次のことです。

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

戻り値の型が違うようです。文字列かもしれませんが、確かに、元の結果をExecuteScalar別の変数に格納し、デバッガーを使用してその CLR 型を判別してみてください。

于 2012-11-28T17:20:43.537 に答える