2013-08-01 33 views
0

请检查下面的代码示例,我想要一个类型的进程和B类型的进程完成这两个或两个都没有。下面的代码是否成功?事务范围中有多个连接?

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 30, 0))) 
     { 

con.Open(); 
//do A type process 
con.Close(); 

con.Open(); 
//do B type process 
con.Close(); 


    scope.Complete(); 
     } 

PS:(请不要建议使用1 CON,原因是我用的是3层架构,在此链接(http://geekswithblogs.net/edison/archive/2009/04/05/a-simple-3-tier-layers-application-in-asp.net.aspx),和AB型过程调用的函数(genericdata类)它会自动打开和关闭它的连接。)所以上面的代码是我的实际代码的解释。

回答

1

使用DTC时,它将充当您的数据库层和数据库之间的层。这意味着在调用.Complete()之前,对db进行的任何更改都不会被应用。它使用哪个连接和事务涉及多少数据库并不重要。

确保您调用.Complete()和事务结束。甚至你可以有嵌套事务范围

Scope1 Scope2 Scope3

以上

,每当Scope1.Complete被调用时,数据将被移动到数据库中,即使子作用域调用完成