从数据库中的单元格中减去文本框

本文关键字:文本 单元格 数据库 | 更新日期: 2023-09-27 18:31:44

>我有一个将产品添加到发票的按钮,我希望它也从数据库中删除产品,如何编辑此查询以使其从数据库中删除?

我认为我的错误是因为我转换cmbQuantity.Text的方式,有人可以帮助我修复吗?

SqlCommand inventorycontrol = new SqlCommand("Update Product SET quantityAvailable=quantityAvailabe - '" + Convert.ToInt32(cmbQuantity.Text) + "' WHERE productName='" + cmbProdName.Text + "'", con);

从数据库中的单元格中减去文本框

如果没有错误消息,很难猜测。

但乍一看,你在这里有一个错字:quantityAvailable=quantityAvailabe -应该是quantityAvailable=quantityAvailab**l**e -.

此外,您不得引用整数部分,因此'" + quantityToRemove + "'变得" + quantityToRemove + ".但最好的方法是使用参数化,这将简化您的代码。请参阅为什么我们总是喜欢在 SQL 语句中使用参数?

尝试分离对 UI 的访问和构建 SQL:

int quantityToRemove = Convert.ToInt32(cmbQuantity.Text);
string productName = cmbProdName.Text;
string sqlUpdate = @"UPDATE Product 
                     SET quantityAvailable = quantityAvailable - @quantityToRemove
                     WHERE productName= @productName";
SqlCommand inventorycontrol = new SqlCommand(sqlUpdate, con);
inventorycontrol .Parameters.AddWithValue("quantityToRemove", quantityToRemove);
inventorycontrol .Parameters.AddWithValue("productName", productName);

在问题中,您没有指定错误,但代码中可能会出现错误。 我会澄清你的。

  1. 当它无法将cmbQuantity.Text转换为 int 时,您无需在双引号内传递整数:- 在这里,我建议的答案将通过在数量无效时显示错误消息来帮助您处理此错误。
  2. 您正在使用的查询为 SQL 注入打开了广泛的范围。我建议你使用参数化查询来避免注入,作为一个整体你可以像下面这样使用:

     int quantity;
        if (int.TryParse(cmbQuantity.Text, out quantity))
        {
            SqlCommand inventorycontrol = new SqlCommand("Update Product SET quantityAvailable=quantityAvailabe - @Quantity WHERE productName=@prodName", con);
            inventorycontrol.Parameters.AddWithValue("@Quantity",quantity);
            inventorycontrol.Parameters.AddWithValue("@prodName", cmbProdName.Text);
            //Execue command here
        }
        else
        {
            // show message invalid quantity
        }