TransactionScope是否可用于sql操作,它是否与Sqltransaction做同样的事情?

时间:2010-05-31 09:27:50

标签: c# sql transactionscope

我可以这样做:

using (var scope = new TransactionScope())
            {
                using (var conn = new SqlConnection(Cs))
                {
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                       ...
                        scope.complete();

                    }
                }
            }

与使用catch(){rollback;}

的SqlTransaction相同

1 个答案:

答案 0 :(得分:2)

TransactionScope创建implicit transaction,因此事务范围内支持事务处理的任何操作都将由其根据事务管理器处理。

在数据库处理的情况下,它将使用SqlTransaction。所以,是的,您给定的代码将与使用SqlTransaction手动执行相同。


您可以调用transaction.Current来获取当前事务管理器的处理程序以确保这一点。

请注意,一个TransactionScope对象可以具有隐式事务类型,因此您需要嵌套TransactionScope个对象以确保对多个管理器进行事务处理。 F.e:

using(var ts = new TransactionScope)
{
      using(var db = new TransactionScope)
      {
         //do db processing
      }
      using(var msmq = new TransactionScope)
      {
         //do msmq processing
      }
      ts.Complete();
}