0
private void txtItems_TextChanged(object sender, EventArgs e)
{
   try
   {
      MySqlCommand com = new MySqlCommand();
      MySqlDataReader read;
      com.CommandText = "SELECT * FROM Inventory where ProductID ='" + txtbCode.Text + "'";
      com.Connection = MySQLConnection.con;
      MySQLConnection.con.Open();
      read = com.ExecuteReader();
      while (read.Read())
      {
         txtCatogery.Text = read["Catogery"].ToString();
         txtDiscriptions.Text = read["Description"].ToString();
         txtQTY.Text = read["QTY"].ToString();
         txtPrice.Text = read["Price"].ToString();
      }
    //Rest of code
   }
}

当我在txtbCodeTextBoxes 中输入条形码时,会从 db 中获取值,但如果我有带有条形码的产品,请1234继续输入 56 (123456) 我没有带有该条形码的产品,但文本框的值不会刷新,它们会保持读取的值约为 1234。

我该如何做到这一点?

4

4 回答 4

3

此代码存在多个问题,但要回答您的主要问题,这是因为您的while (read.Read())线路。如果他们查询返回0行,while statement则永远不会执行。

如果您期望单行,则应if (read.Read())改为,并添加else条件以清除文本框。

您可能想要研究的其他问题是确保在完成阅读器后将其处置,并使用参数而不是将用户输入直接嵌入到查询中。

于 2013-01-26T19:42:21.277 回答
0

首先,您应该对查询进行参数化- 请参阅Sql Injection

关于您的问题,您应该在查询数据库之前清除以前的值,因为在您当前的代码中,只有在 Read() 成功时才会更新文本框(例如,您在数据库中有一行)...但是如果您没有它不会被更新的行,并且以前的条目将保留。

 private void txtbCode_TextChanged(object sender, EventArgs e)
 {
     txtCatogery.Text = String.Empty;
     txtDiscriptions.Text = String.Empty;
     ...

     try
     {
        MySqlCommand com = new MySqlCommand();
        MySqlDataReader read;
        .....
于 2013-01-26T19:40:13.520 回答
0

您应该检查查询的返回值,如果没有返回值,请清除您的Textboxes

        MySQLConnection.con.Open();
        read = com.ExecuteReader();
    if(read != null)
    {
        while (read.Read())
        {
        txtCatogery.Text = read["Catogery"].ToString();
        txtDiscriptions.Text = read["Description"].ToString();
        txtQTY.Text = read["QTY"].ToString();
        txtPrice.Text = read["Price"].ToString();
        }
    }
    else
    {
        txtCatogery.Text = "";
        txtDiscriptions.Text =  "";
        txtQTY.Text =  "";
        txtPrice.Text =  "";
    }

Beer 请记住,您的代码可能会产生一些错误,例如,如果从数据库返回多条记录,您TextBoxes将只显示最后一条记录数据。如果任何记录具有空字段,则会由于您的.ToString(). 最后SQL injection是一个主要威胁,除非您编写此代码用于学习。

于 2013-01-26T19:50:08.407 回答
0

你可以使用.HasRows之前你可以去.Read()

...
MySqlDataReader read = cmd.ExecuteReader(); 
if (read.HasRows) 
{ 
  while (read.Read())
  {
      //Do Stuff
  }
}
else
{
   //Do Stuff
   txtPrice.Clear();
}
于 2013-01-26T19:50:56.963 回答