我正在尝试使用列表框中的字符串更新数据库的一列,该字符串与数据库中的字符串完全匹配,但它仅适用于没有空格的字符串。例如,如果我在列表框中有“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());
}
}
答案 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 + "'";
试试这个:)
您需要将产品标识为字符串:)