使用数据库中的字符串更新数据库中的表

时间:2013-03-01 09:45:18

标签: c# sql winforms

我正在尝试使用列表框中的字符串更新数据库的一列,该字符串与数据库中的字符串完全匹配,但它仅适用于没有空格的字符串。例如,如果我在列表框中有“Iphone”之类的产品,我会得到该字符串并传递给下面的Update()方法,它可以工作。 但如果我使用“三星Galaxy S3”,作为从列表框中选择的项目,visual studio会向我抛出没有这样的行的错误。

我确信这是因为这个词之间的空间。我该如何解决这个问题。

更新数据库的代码

 public string Update(string product)
            {
                // Create connection object
                int ix = 0;
                string rTurn = "";
                OleDbConnection oleConn = new OleDbConnection(connString);
                try
                {
                    oleConn.Open();
                    string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 " + " WHERE [Product Name]= " + product;
                    OleDbCommand oleComm = new OleDbCommand(sql, oleConn);

                    oleComm.Parameters.Add("@product", OleDbType.Char).Value = product;

                    ix = oleComm.ExecuteNonQuery();
                    if (ix > 0)
                        rTurn = "Stock Updated";
                    else
                        rTurn = "Update Failed";
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    oleConn.Close();
                }
                return rTurn;
            }

将每个项目的字符串传递给Update()方法的代码。

public void UpdateStock()
        {
            foreach (var listBoxItem in listBox1.Items)
            {
                string result = Update(listBoxItem.ToString());
            }
        }

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试更改

string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 " + " WHERE [Product Name]= " + product;

string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 WHERE [Product Name]= ?";

您正在添加参数@product,但您没有使用它。连接查询不是一个好习惯,它会让您对SQL注入攻击持开放态度。

答案 1 :(得分:0)

string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 " + " WHERE [Product Name]= '" + product + "'"; 

试试这个:)

您需要将产品标识为字符串:)