using (var scope = new TransactionScope())
{
using (var conn = new SqlConnection(Cs))
{
using (var cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
...
scope.complete();
}
}
}
与使用catch(){rollback;}
答案 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();
}