在达到特定限制时发出警报消息

时间:2016-02-29 10:00:22

标签: c#

我正在创建一个表单,用于警告用户数据库中此项目的库存正在达到限制或通过限制。

这是我检查特定股票数量的代码

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

1 个答案:

答案 0 :(得分:3)

这实际上不是答案,但您没有理由检索所有数据以收集行数。请使用SQL COUNTExecuteScalar()

此外,对查询使用命令Parameters很重要。不要以你的方式构建查询!输入变量Glucose通常从Windows窗体或网页上的TextBox控件中检索。放入该TextBox控件的任何内容都将放入inputCity并添加到SQL字符串中。这种情况会诱使黑客用恶意的东西替换该字符串。在最糟糕的情况下,您可以完全控制您的计算机。

不是动态构建字符串,而是如上面的错误示例所示,使用参数。放入参数的任何内容都将被视为字段数据,而不是SQL语句的一部分,这使您的应用程序更加安全。

使用参数化查询分为三个步骤:

  1. 使用参数构造SqlCommand命令字符串。
  2. 声明SqlParameter对象,根据需要指定值。
  3. 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();
    
  4. 然后,您将使您的代码更加干净,并防止额外加载到您的通信渠道。