2012-11-28 3 views
0

tenant라는 select 쿼리에서 단일 값을 가져 오려고합니다. SQL Server의 Tenant_Facing에는 'Y'또는 'N'중 하나의 char 값이 있습니다. 실행하면 Char tenant = (Char) cmd.ExecuteScalar();에서 "지정된 캐스트가 유효하지 않습니다"라는 오류가 발생합니다. 두 문자가 일치하지 않는 이유를 이해할 수 없습니까? 여기 내 코드,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

문자열로 변환 해 보았습니까? 문자열 테넌트 = (문자열) 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(); 
관련 문제