从布尔值检索值失败

本文关键字:失败 检索 布尔值 | 更新日期: 2023-09-27 18:14:19

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();

我有这段代码,我正在测试它,为此我从表client中选择黑名单(布尔)值,其中ID是我选择的。在messagebox中显示它,我有0 1和null值当我尝试在messagebox上显示它时它会总是显示" TRUE "我做错了什么?

从布尔值检索值失败

您正在对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,如果它对您更有意义的话

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