【问题标题】:Update a table after an insert in SQL in C#在 C# 中的 SQL 中插入后更新表
【发布时间】:2015-07-18 15:25:45
【问题描述】:

我有这段代码,它可以在下订单后从数据表会话中将数量和商品 ID 插入到订单详细信息中。

    for (i = 0; i <= dt2.Rows.Count - 1; i++) {
        sql = "INSERT INTO details (ID, itemID, Qty) " + " VALUES " + " ('" + stroID + "','" + dt2.Rows[i]["itemID"] + "','" + dt2.Rows[i]["qty"] + "')";
sql = string.Format("UPDATE Items SET AvailQty = AvailQty - {0} WHERE itemID = {1}", dt2.Rows[i]["qty"],stroID);
        var _with1 = cmd;
        _with1.Connection = con;
        _with1.CommandText = sql;
        _with1.CommandType = CommandType.Text;
        _with1.ExecuteNonQuery();
    }

但是,我不确定如何从可用数量中减去数量。

我有另一个名为 Items 的表,其中有一个字段 AvailQty,我知道如何进行查询,

UPDATE Items
   SET AvailQty = AvailQty - Qty
 WHERE itemID = stroID

但是我不确定如何在这种情况下执行此操作,因为我正在使用 dt2.rows?

谁能帮助我如何从 Qty 更新 AvailQty?

【问题讨论】:

  • 在里面放另一个sql命令并执行,sql = string.Format("UPDATE Items SET AvailQty = AvailQty - {0} WHERE itemID = {1}", dt2.Rows[i][ "数量"],stroID);
  • 我建议你也事务范围,所以如果订单失败,新的数量不会设置
  • @DanielVorph 你好,我已经按照你的建议做了,但似乎没有扣除数量:(
  • 另外,当您可以使用 sql 参数时,切勿使用字符串连接来创建 sql 语句。这只是为了sql injection attack.
  • OP,您的查询容易受到 SQL 注入的攻击。考虑使用参数化查询来避免这种情况

标签: c# asp.net sql-server session datatable


【解决方案1】:

您的存储过程应如下所示。 (c#我让你自己处理):

CREATE PROCEDURE OrderAnItem(
    @ID int, 
    @itemID int, 
    @Qty int
)
AS
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO details (ID, itemID, Qty) VALUES (@ID, @ItemId, @Qty)

UPDATE Items SET AvailQty = AvailQty - @Qty  WHERE itemID = @itemID 

COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
    ROLLBACK TRANSACTION
END CATCH

注意代码直接写在这里,可能有错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2012-05-23
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多