2013-05-17 49 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和空值,当我试图在MessageBox上显示它时,它将始终显示“TRUE”。我究竟做错了什么?从布尔值检索值失败

回答

4

您在SELECT查询中使用ExecuteNonQuery,但这不起作用,因为ExecuteNonQuery在这种语句上返回的唯一结果是-1。 (见备注一节中提供的链接)

如果查询返回只有一排则:

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

但是有点预防措施是必要的。如果查询不返回任何内容(即没有找到ID),那么转换为布尔值将失败,因为ExecuteScalar将返回null。

所以,正确的做法是:

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

可以在空的情况下更改默认值设置为true,而不是假的,如果它使更多的意义,你

0

使用command.ExecuteScalar()来从一个值一个SELECT声明。