2
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 上显示它时,它总是显示“真”。我究竟做错了什么?

4

2 回答 2

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

于 2013-05-17T15:08:45.637 回答
0

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

于 2013-05-17T15:09:06.453 回答