2013-05-17 5 views
3
mConn = new MySqlConnection("Persist Security Info=False; server=localhost;database=FichasReparacao;uid=root"); 
mConn.Open(); 
MySqlCommand command = new MySqlCommand("SELECT blacklist FROM Cliente where ID [email protected]", mConn); 
command.Parameters.AddWithValue("@id", tbid.Text); 

//Executa a Query SQL 
blist = Convert.ToBoolean(command.ExecuteNonQuery()); 
MessageBox.Show(Convert.ToString(blist)); 
mConn.Close(); 

나는이 코드 조각을 테스트 중입니다.이를 위해 Cliente 테이블에서 블랙리스트 (부울 값) 값을 선택합니다. 여기서 ID는 내가 선택한 것입니다. 그리고 메시지 상자에 보여 주면, 0, 1, null 값을 가지고 MessageBox에 표시하려고하면 'TRUE'가 항상 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?부울 값을 가져 오지 못했습니다.

답변

4

SELECT 쿼리에서 ExecuteNonQuery를 사용하고 있는데,이 종류의 명령문에서 ExecuteNonQuery이 반환하는 유일한 결과가 -1이기 때문에이 작업이 수행되지 않습니다. 쿼리는 다음 하나의 행을 반환하는 경우

을 (제공된 링크에서 설명 부분을 참조하십시오) :

blist = Convert.ToBoolean(command.ExecuteScalar()); 

그러나주의의 비트가 필요하다. 쿼리에서 아무 것도 반환하지 않으면 (즉 ID가없는 경우) ExecuteScalar이 null을 반환하기 때문에 부울로의 변환이 실패합니다.

그래서 올바른 방법은 다음과 같습니다 더 의미가 있습니다 경우

0

사용 command.ExecuteScalar()가에서 값을 가져올 수 있도록

object result = command.ExecuteScalar(); 
blist = (result == null ? false : Convert.ToBoolean(result)); 

당신은 거짓 대신 true로 널 (null)의 경우 기본 값을 변경할 수 있습니다 SELECT 성명

관련 문제