2012-11-28 160 views
0

我想從稱爲租戶的選擇查詢中獲得單個值。來自SQL Server的Tenant_Facing具有單個字符值,即'Y'或'N'。當我執行它時,在Char tenant =(Char)cmd.ExecuteScalar();上出現錯誤,指出「指定的轉換無效」。 我不明白爲什麼它不匹配,即使他們都是Char?這裏我的代碼,ASP.NET c#指定的轉換無效

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

你有沒有試過把它轉換成字符串?字符串tenant =(字符串)cmd.ExecuteScalar(); – SimonGates

+0

小建議:用布爾代替Y或N. –

回答

2

即使您在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; 
} 
+0

謝謝!當它仍然映射到字符串時它工作並且有點奇怪 – StudentIT

0

看起來返回值是不同的類型。我想說它可能是一個字符串,但可以肯定的是,嘗試將原始結果ExecuteScalar存儲在一個單獨的變量中,並使用調試器來確定其CLR類型。

0

Sql Char等於C sharp string

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