基本上我想要一个MessageBox,它在我的Form加载时出现,表示该值低于常量值(如30)。 这是我刚刚编写的代码,但它不起作用,因为IF条件在语法上不正确。
private void button2_Click(object sender, EventArgs e)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|DataMG.mdb";
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "Select COUNT(*) from Prodotti where Disponibilta < 30";
cmd.Connection = conn;
conn.Open();
var count = (int)cmd.ExecuteScalar();
if (count < 0)
{
MessageBox.Show("Attenzione alcuni prodotti sono in disponibilita' limitata!");
conn.Close();
}
}
我该怎么办? 谢谢
答案 0 :(得分:2)
尝试这样的事情:
using (var cmd = new OleDbCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select COUNT(*) from Prodotti where Disponibilta < 30";
var count = (int)cmd.ExecuteScalar();
if (count > 0)
{
MessageBox.Show("Attenzione alcuni prodotti sono in disponibilita' limitata!");
//connection.Close(); wrap connection around an using
}
}
基本上你要向数据库询问Disponibilta&lt; Prodotti的数量。 30,所以,如果有任何你显示消息框。
修改强>
我认为Disponibilta是一个数字。
答案 1 :(得分:0)
您不应该将ExecuteNonQuery()
与SELECT
语句一起使用,SQLDataReader
更快,并且正确的方法可以执行此操作:
cmd.CommandText = "SELECT * FROM Prodotti WHERE Disponibilta < 30";
conn.Open();
MySqlDataReader myReader = cmd.ExecuteReader();
if(myReader.HasRows)
{
//This means you have at least one product with less than 30.
}
myReader.Close();
conn.Close();
答案 2 :(得分:0)
Select
关键字引入了一个查询,因此您必须使用.ExecuteReader()
。.ExecuteNonQuery()
用于INSERT
,DELETE
,UPDATE
和返回值是受影响的行数。
根据您的情况,创建一个阅读器并检查第一个值
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read()
{
if (reader[0] < aValue) //make here the appropiate conversion
{
MessageBox.Show("Attenzione alcuni prodotti sono in disponibilita' limitata!");
connection.Close();
break;//maybe return?
}
}