简体   繁体   English

从数据库中删除并减去特定单元格中的数据

[英]Delete and minus data at specific cell from database

I am creating a form page where I need to show data in data grid view. 我正在创建一个表单页面,该页面需要在数据网格视图中显示数据。 When the user adds any item from the grid view it should be minused from inventory and update inventory when user press add button. 当用户从网格视图添加任何项目时,应从库存中减去该项目,并在用户按下添加按钮时更新库存。

The code that I am using is giving me this exception: 我正在使用的代码给了我这个例外:

Additional information: Incorrect syntax near '='. 附加信息:'='附近的语法不正确。

My code: 我的代码:

    private void btnMoveItem_Click(object sender, EventArgs e)
    {
        SqlConnection con2 = new SqlConnection(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;Integrated Security=True");
        con2.Open();

        String Query1= "DELETE FROM Inventory WHERE id = " + tbID.Text + "";

        SqlCommand sqlcmd1 = new SqlCommand(Query1, con2);
        sqlcmd1.ExecuteNonQuery();

        SqlCommand sqlcmd = new SqlCommand("UPDATE Inventory SET Quantity = @Quantity" +"WHERE id= " + tbID, con2);
        sqlcmd.Parameters.AddWithValue("@Item", this.nudQuantity.Text);
        sqlcmd.ExecuteNonQuery();

        con2.Close();
    }

The error is that you concatenate two strings without space between. 错误是您将两个字符串连接在一起而没有空格。

But there are many other errors. 但是还有许多其他错误。

All user values should be a sql parameter with correct type. 所有用户值都应是具有正确类型的sql参数。 nudQuantity.Text must be parsed/validated. 必须解析/验证nudQuantity.Text Maybe id too. 也许id了。

string connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;Integrated Security=True";

using (var con2 = new SqlConnection(connectionString))
{
    con2.Open();
    var Query1 = "DELETE FROM Inventory WHERE id = @id";

    var sqlcmd1 = new SqlCommand(Query1, con2);
    sqlcmd1.Parameters.AddWithValue("@id", tbID.Text);
    sqlcmd1.ExecuteNonQuery();

    var sqlcmd = new SqlCommand("UPDATE Inventory SET Quantity = @Quantity WHERE id=@id", con2);
    sqlcmd.Parameters.AddWithValue("@id", tbID.Text);
    sqlcmd.Parameters.AddWithValue("@Quantity", int.Parse(nudQuantity.Text));

    sqlcmd.ExecuteNonQuery();       
}

You could also merge these two query in a single one. 您也可以将这两个查询合并为一个查询。

This query should be more like what you need. 该查询应该更像您所需要的。

UPDATE Inventory SET Quantity = Quantity-@Quantity WHERE id=@id;
DELETE FROM Inventory WHERE id = @id AND Quantity <= 0;

But there are no check on product availability here. 但是这里没有检查产品的可用性。 If @Quantity is greater than Quantity, then no error will be thrown. 如果@Quantity大于Quantity,则不会引发任何错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM