C# 如何更新数据库中的库存数量?
我有windows应用程序来添加购买信息。在将购买添加到数据库之前,用户从组合框中选择项目并添加到列表框中。当用户单击AddPurchase时,数据库中将有一个或多个项目 这些项目的名称与数据库中的产品名称完全匹配 我想获取列表框中每个项目的字符串,然后编写sql查询,以减少数据库中项目的数量。总数量存储在“数量”列下的表Product中 有没有人有执行这项任务的想法 我正在尝试将listbox项的字符串逐个传递给此方法C# 如何更新数据库中的库存数量?,c#,sql,winforms,C#,Sql,Winforms,我有windows应用程序来添加购买信息。在将购买添加到数据库之前,用户从组合框中选择项目并添加到列表框中。当用户单击AddPurchase时,数据库中将有一个或多个项目 这些项目的名称与数据库中的产品名称完全匹配 我想获取列表框中每个项目的字符串,然后编写sql查询,以减少数据库中项目的数量。总数量存储在“数量”列下的表Product中 有没有人有执行这项任务的想法 我正在尝试将listbox项的字符串逐个传递给此方法 public string Update(string product)
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;
}
上述方法将从以下方法获取产品名称:
public string updateStock()
{
string listItem = string.Empty;
foreach (var listBoxItem in listBox1.Items)
{
if (listBox1.Items.IndexOf(listBoxItem) < listBox1.Items.Count - 1)
{
listItem = listBox1.Items.ToString();
}
}
return listItem;
}
您可以尝试以下方法:
public void UpdateStock()
{
foreach (var listBoxItem in listBox1.Items)
{
string result = Update(listBoxItem.ToString());
}
}
public string Update(string product)
{
// Create connection object
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.VarChar, 50).Value = product;
oleComm.ExecuteNonQuery();
rTurn = "Stock Updated";
}
catch (Exception ex)
{
rTurn = "Update Failed";
}
finally
{
oleConn.Close();
}
return rTurn;
}
编辑:您可以在添加参数时轻松指定大小-如上所示。50是任意的。您应该确保其大小与目标[Product Name]列的大小相同。您可以提供表的结构,可以使用[SQL Fiddle](http//sqlfiddle.com)示例吗?您是在寻求有关SQL查询、如何从列表框中获取名称的帮助,还是在这两者之间的所有内容?恐怕这个问题太广泛了。。。。也许你需要把它分成不同的问题,并展示你对每一个问题都做了哪些尝试。我只是想获取列表框中每个项目的字符串,并将该字符串传递给update方法。。让我编辑这个问题。我正在更新answer@peterm问题UpdateEdit适用于一个单词如“膝上型电脑”的项目,但如果您有类似“三星Galaxy S3”的项目,则会抛出错误。
public void UpdateStock()
{
foreach (var listBoxItem in listBox1.Items)
{
string result = Update(listBoxItem.ToString());
}
}
public string Update(string product)
{
// Create connection object
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.VarChar, 50).Value = product;
oleComm.ExecuteNonQuery();
rTurn = "Stock Updated";
}
catch (Exception ex)
{
rTurn = "Update Failed";
}
finally
{
oleConn.Close();
}
return rTurn;
}