代码改变世界

在.net 2.0 中执行分布式事务:隐式事务篇(SQL Server 与 Oracle)

2007-04-07 22:34  晓风残月  阅读(...)  评论(...编辑  收藏

项目涉及到多个数据库的查询更新操作,也就必然需要分布式事务的支持,查了MSDN知道 .net 2.0 中利用新增的 System.Transactions 命名空间可以简单的实现分布式事务:

System.Transactions 基础结构通过支持在 SQL Server、ADO.NET、MSMQ 和 Microsoft 分布式事务协调器 (MSDTC) 中启动的事务,使事务编程在整个平台上变得简单和高效。它提供基于 Transaction 类的显式编程模型,还提供使用 TransactionScope 类的隐式编程模型,在这种模型中事务是由基础结构自动管理的。强烈建议使用更为方便的隐式模型进行开发。
具体参考:http://msdn2.microsoft.com/zh-cn/library/system.transactions(VS.80).aspx 以及相关的连接都提供了非常详细的信息

参考MSDN的Demo做了SQL Server 2000 的 使用事务范围实现隐式事务测试,事务可以正常提交以及回滚:
 
测试的时候需要在 Sql Server 服务管理器中开启 MSDTC,我是再 SQL 2k上做的测试,2k5上应该得到更好的支持。
方法 Test1() 是单数据库的事务,只是为了测试;
 Test2()和Test3() 没有实质区别,都是自动注册事务。
完整代码下载:/Files/Jinglecat/DTCSQL.rar

同时我也尝试了一个Oracle版本,Oracle 10g 2,其中数据库orcl 是默认的启动数据库,而数据库nhrs是我自己建的一个数据库,测试通过,代码跟SQL没有两样,之前网上查到有网友说OracleClient还不支持 MSDTC,查了很多资料,确实在 ado.net 1.x 有问题,现在可以确信 ado.net 2.0 已经可以支持。
完整代码下载:/Files/Jinglecat/DTCORA.rar

现在银杏事务已经可以满数项目需求了,有时间再多更多的研究了^_^