在单个事务的范围内多次调用相同的ADO.NET命令

时间:2016-11-14 20:34:27

标签: sql-server transactions ado.net

我的问题涉及如何在订单上插入多个订单项,例如,在单个交易的范围内。

必须插入所有订单项,或者必须回滚交易。

是否可以在不将自定义CLR对象作为参数发送的情况下对同一个表执行多次插入,相当于表值参数?可以在循环内调用MyInsertSingleLineItemCommand,每次调用都插入一个行项吗?我们需要一个中间临时表吗?

1 个答案:

答案 0 :(得分:1)

  

可以在不发送的情况下完成对同一个表的多次插入   自定义CLR对象作为参数,相当于表值   参数β

是的,您可以使用SqlTransaction在一个事务中逐行执行。

  

可以在循环中调用MyInsertSingleLineItemCommand,插入   每次调用一个订单项?

以下示例代码。

using (SqlConnection cn = new SqlConnection("YOUR CONNECTION STRING")
{
     cn.Open();
     using (SqlTransaction tr = cn.BeginTransaction()) 
     {
          // your looping code here persisting to sql server db
          tr.Commit();
     }
}

您也可以使用enter image description here完成此操作。

using (var ts = new TransactionScope())
{
   using (SqlConnection connection = new SqlConnection("YOUR CONNECTION STRING"))
   {
      connection.Open();
      // your looping code here persisting to sql server db
   }

   ts.Complete();
}
  

我们需要一个中间临时表吗?

不,你不需要临时表。

话虽如此,您可能需要考虑使用TransactionScopeSqlBulkCopy将数据传递给Sql Server。虽然这取决于您的要求。

Table Value Parameter