我正在创建一个表单,用于警告用户数据库中此项目的库存正在达到限制或通过限制。
这是我检查特定股票数量的代码
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "select * from tbl_BloodChemistry where Glucose = "+123+" ";
reader = cmd.ExecuteReader();
int count = 0;
while (reader.Read())
{
count = count + 1;
}
if (count == 1)
{
MessageBox.Show("Critical!");
}
conn.Close();
答案 0 :(得分:3)
这实际上不是答案,但您没有理由检索所有数据以收集行数。请使用SQL COUNT和ExecuteScalar()。
此外,对查询使用命令Parameters很重要。不要以你的方式构建查询!输入变量Glucose
通常从Windows窗体或网页上的TextBox控件中检索。放入该TextBox控件的任何内容都将放入inputCity并添加到SQL字符串中。这种情况会诱使黑客用恶意的东西替换该字符串。在最糟糕的情况下,您可以完全控制您的计算机。
不是动态构建字符串,而是如上面的错误示例所示,使用参数。放入参数的任何内容都将被视为字段数据,而不是SQL语句的一部分,这使您的应用程序更加安全。
使用参数化查询分为三个步骤:
SqlCommand
命令字符串。 SqlParameter
对象,根据需要指定值。 将SqlParameter
对象分配给SqlCommand
对象的Parameters属性。
var glucoseFilterValue = "123";
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "select count(*) from tbl_BloodChemistry where Glucose = @Glucose";
cmd.Parameters.AddWithValue("@Glucose", glucoseFilterValue);
var count = (int) cmd.ExecuteScalar();
if (count == 1)
{
MessageBox.Show("Critical!");
}
conn.Close();
然后,您将使您的代码更加干净,并防止额外加载到您的通信渠道。