C# 父表总是插入重复的行

C# 父表总是插入重复的行,c#,sql,sql-server,asp.net-mvc,C#,Sql,Sql Server,Asp.net Mvc,我有以下带有事务块的代码。当我下订单时,我的基表(TBL\u T\u Orders)总是插入两个相同的行(具有不同的OrderId的重复行)。详细信息表TBL\u T\u OrderItems正确插入了项目 我的代码 public CartTotal InsertNewOrder(CartTotal cartTotal) { try { con.Open(); transaction

我有以下带有事务块的代码。当我下订单时,我的基表(
TBL\u T\u Orders
)总是插入两个相同的行(具有不同的
OrderId
的重复行)。详细信息表
TBL\u T\u OrderItems
正确插入了项目

我的代码

public CartTotal InsertNewOrder(CartTotal cartTotal)
{
            try
            {
                con.Open();

                transaction = con.BeginTransaction();

                string orderQuery = @"INSERT INTO [dbo].[TBL_T_Orders] ([OrderCode],[OrderReceivedDate]) 
                                      OUTPUT INSERTED.OrderId
                                      VALUES (@OrderCode, @OrderReceivedDate)";
                cmd = db.GetSqlStringCommand(orderQuery);
                cmd.Transaction = transaction;

                db.AddInParameter(cmd, "OrderCode", DbType.Int32, cartTotal.OrderCode);
                db.AddInParameter(cmd, "OrderReceivedDate", DbType.DateTime,DateTime.Now);

                db.ExecuteNonQuery(cmd, transaction);

                int OrderId = (int)cmd.ExecuteScalar();

                foreach (var item in cartTotal.items)
                {
                    string orderItemsQuery = @"INSERT INTO [dbo].[TBL_T_OrderItems] ([OrderId], [ItemId]
                                               VALUES (@OrderId, @ItemId)";

                    cmd = db.GetSqlStringCommand(orderItemsQuery);
                    cmd.Transaction = transaction;

                    db.AddInParameter(cmd, "OrderId", DbType.Int32, OrderId);//temp
                    db.AddInParameter(cmd, "ItemId", DbType.String, item.ItemId);

                    db.ExecuteNonQuery(cmd, transaction);
                }

                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return cartTotal;
}

您将获得重复的条目,因为您将执行两次查询。第一次使用
db.ExecuteNonQuery
,第二次使用
cmd.ExecuteScalar()


删除第一行。然后它将完美地工作。

好吧,您可以执行
db.ExecuteNonQuery(cmd,transaction)之后,直接执行
intorderid=(int)cmd.ExecuteScalar()--看起来您执行了两次插入。@当我删除该项时,stickybit显示错误“System.InvalidOperationException:“ExecuteScalar:Connection属性尚未初始化”。当我删除该项时,异常返回类似“System.InvalidOperationException:“ExecuteScalar:Connection属性尚未初始化”。“添加cmd.Connection=con;