从布尔值中检索值失败

时间:2013-05-17 15:07:49

标签: c# mysql

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 =@id", 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”。我做错了什么?

2 个答案:

答案 0 :(得分:4)

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

如果您的查询只返回一行,那么:

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

然而,有必要采取一些预防措施。如果查询没有返回任何内容(即没有找到ID),则转换为布尔值将失败,因为ExecuteScalar将返回null。

所以正确的方法是:

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

如果对你来说更有意义,你可以将null的情况下的默认值更改为true而不是false

答案 1 :(得分:0)

使用command.ExecuteScalar()SELECT语句中获取值。