0

我正在尝试使用列表框中的字符串更新数据库的一列,该字符串与数据库中的字符串完全匹配,但它仅适用于没有空格的字符串。例如,如果我在列表框中有类似“Iphone”的产品,我会得到该字符串并传递给下面的 Update() 方法,它可以工作。但是,如果我使用“Samsung 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());
            }
        }

在此处输入图像描述

4

2 回答 2

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 注入攻击。

于 2013-03-01T09:51:15.800 回答
0
string sql = "UPDATE [Product] SET [Quantity]=[Quantity] - 1 " + " WHERE [Product Name]= '" + product + "'"; 

试试这个:)

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

于 2013-03-01T09:49:35.740 回答