添加MS Access更新

时间:2013-03-13 20:32:52

标签: c# winforms ms-access updates addition

我正在使用MS Access,并希望如何正确更新数据。我在按钮点击事件中使用的代码没有运气

OleDbCommand cmd = new OleDbCommand("SELECT * FROM ItemTemp WHERE ITEM='" + txtItemname.Text + "'", GetConnection());
OleDbDataReader reader = cmd.ExecuteReader();

//check if this item exist on the table ItemTemp
if (reader.HasRows == true)
{
    // item exists, do below action
    OleDbCommand cmde = new OleDbCommand("UPDATE ItemTemp SET QUANTITY=QUANTITY + @QUANTITY, PRICE=PRICE + @PRICE WHERE ITEM='" + txtItemname.Text + "'", GetConnection());
    cmde.Parameters.AddWithValue("@QUANTITY", txtItemquantity.Value); //numericupdown control
    cmde.Parameters.AddWithValue("@PRICE", txtItemprice.Text); //textbox control
    cmde.ExecuteNonQuery();
}

更新前数据库的数据:

ID    |    ITEM    |    QUANTITY    |    PRICE
1     |    ITEM1   |        1       |    400

数据库更新后的数据:

ID    |    ITEM    |    QUANTITY    |    PRICE
1     |    ITEM1   |       11       |    400400

我希望它在更新后的数据库数据:

ID    |    ITEM    |    QUANTITY    |    PRICE
1     |    ITEM1   |        2       |    800

我相信我的命令是正确的,如果不是我的坏......除了我的按钮点击事件上的这个代码。任何想法?

2 个答案:

答案 0 :(得分:1)

好吧,现在似乎已经完成了。我只是改变

cmde.Parameters.AddWithValue("@QUANTITY", txtItemquantity.Value); //numericupdown control
cmde.Parameters.AddWithValue("@PRICE", txtItemprice.Text); //textbox control

到这个

cmde.Parameters.AddWithValue("@QUANTITY", Convert.ToInt32(txtItemquantity.Value));
cmde.Parameters.AddWithValue("@PRICE", Convert.ToInt32(txtItemprice.Text));

答案 1 :(得分:1)

首先,您应该确保数据库字段数量和价格是数字类型。如果它们是Text,那么您的查询将作为参数传递的字符串值与数据库列中的字符串相连接。

其次,当您使用AddWithValue传递参数时,框架会为您查看传递值的数据类型的数据类型。在您的情况下,您传递一个字符串,并且数据库引擎会看到一个字符串,该字符串将连接到现有值。您需要在传递到适当的数据类型之前进行转换

最后,对传递给数据库引擎的每件事都使用依赖参数化查询,特别是如果传递的值来自输入文本框。

 OleDbCommand cmd = new OleDbCommand("SELECT * FROM ItemTemp WHERE ITEM=@item", GetConnection());
 cmd.Parameters.AddWithValue("@item", txtItemName.Text);
 OleDbDataReader reader = cmd.ExecuteReader();

 //check if this item exist on the table ItemTemp
 if (reader.HasRows == true)
 {
     OleDbCommand cmde = new OleDbCommand("UPDATE ItemTemp SET QUANTITY=QUANTITY + @QUANTITY," + 
     "PRICE=PRICE + @PRICE WHERE ITEM=@item, GetConnection());
     cmde.Parameters.AddWithValue("@QUANTITY", Convert.ToInt32(txtItemquantity.Value)); 
     cmde.Parameters.AddWithValue("@PRICE", Convert.ToDecimal(txtItemprice.Text)); 
     cmde.Parameters.AddWithValue("@item", txtItemName.Text);
     cmde.ExecuteNonQuery();
 }