C# 在C中的SQL中插入后更新表#

C# 在C中的SQL中插入后更新表#,c#,asp.net,sql-server,session,datatable,C#,Asp.net,Sql Server,Session,Datatable,我有一个代码,它在下订单后从datatable会话将数量金额和项目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"] + "')";

我有一个代码,它在下订单后从datatable会话将数量金额和项目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();
    }
但是,我不确定在这种情况下如何做到这一点,因为我使用的是dt2.rows


有谁能帮我从数量更新可用数量吗?

您的存储过程应该是这样的。(c#我让你自己处理):


注意直接在这里编写的代码,可能包含错误

用于放置另一个sql命令并执行它,sql=string.Format(“更新项目集AvailQty=AvailQty-{0},其中itemID={1}”,dt2.Rows[i][“qty”],stroID);我建议你也这样做,这样如果订单失败,新的数量就不会增加set@DanielVorph您好,我按照您的建议做了,但似乎没有扣除数量:(另外,在可以使用sql参数的情况下,永远不要使用字符串连接来创建sql语句。这只是一个操作,您的查询容易受到sql注入的影响。请注意使用参数化查询来避免这种情况
UPDATE Items
   SET AvailQty = AvailQty - Qty
 WHERE itemID = stroID
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