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

C# 从数据库中的单元格中减去文本框,c#,C#,我有一个将产品添加到发票的按钮,我希望它也将产品从数据库中删除,如何编辑此查询,使其从数据库中删除 我想我的错误是因为我转换数量的方式。Text,有人能帮我解决吗 SqlCommand inventorycontrol = new SqlCommand("Update Product SET quantityAvailable=quantityAvailabe - '" + Convert.ToInt32(cmbQuantity.Text) + "' WHERE productName='" +

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

我想我的错误是因为我转换数量的方式。Text,有人能帮我解决吗

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

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

但乍一看,这里有一个输入错误:
quantityAvailable=quantityAvailable-
应该是
quantityAvailable=quantityAvailab**l**e-

此外,您不能引用整数部分,因此
“+quantityToRemove+”
变为
“+quantityToRemove+”
。但最好是使用参数化,这将简化您的代码。看

尝试将对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);

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

  • 当无法将
    cmbQuantity.Text
    转换为int时,您不需要传递双引号内的整数:-如果数量无效,我建议的答案将通过显示错误消息来帮助您处理此错误
  • 您正在使用的查询将打开一个很大的范围。我建议您使用参数化查询来避免注入,总体上您可以使用如下方式:

     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
        }
    

  • 这个代码有什么问题?例外?没有更新?什么平台,你的桌子是什么布局?如何以及何时执行此命令?哦,天哪,SQL注入。我假设cmbProdName是一个文本框。现在我将擦除数据库:
    1'--删除表产品始终清理您的输入!为什么不
    int.TryParse()
    我只是剪切并粘贴给定的代码。使用参数化查询是这段代码中的首要问题。在输入端处理错误案例之后,我认为OP需要一次一个建议:)非常感谢:)它是有效的,我同意这段代码离使用还有很长的路要走,但我刚刚开始使用c#,所以我没有研究注入之类的问题,也感谢反馈,我真的很困惑。OP的查询、SQL注入、问题编校、此答案和问题标题与^*任何东西*有什么关系?“从数据库中的单元格中减去一个文本框”,“我有一个按钮可以将产品添加到发票中,我希望它也可以从数据库中删除产品”,然后我们有一个看起来像库存移动的查询:-Owell基本上表单将产品添加到发票中,我使该部分正常工作,但它需要在添加到发票中后立即从库存中减去产品,此查询有助于做到这一点。我认为您希望将
    Convert.ToInt32()
    替换为
    数量