我有一个问题,我必须调用AS400 db2从我的.net调用一系列插入/更新存储过程,然后更新一些SQL2005表,如果AS400数据库中的所有内容都很好.我正在使用的驱动程序没有分布式事务,因此我想知道您是否可以使用任何IBM iSeries Drivers for DB2来创建将参与分布式事务的COM +/.NET组件.请让我知道,如果之前有任何人做过这样的事情或任何指针将不胜感激.
你在用哪个司机?
IBM的DB2 Connect支持Windows DTC管理的分布式事务.
Microsoft的DB2驱动程序(包装在Microsoft Host Integration Server中)也执行事务.
我听到了两件不同的事情.您希望执行跨越SQL和DB2的事务.并且您还想构建一个参与分布式事务的组件.这些可以一起完成,但前者不需要后者.
使用.NET 2.0中的System.Transactions类,您可以执行以下操作:
TransactionOptions options = new TransactionOptions(); options.IsolationLevel = IsolationLevel.Serializable; options.Timeout = TransactionManager.DefaultTimeout; using(var scope = new TransactionScope(TransactionScopeOption.Required, options, EnterpriseServicesInteropOption.Full) ) { TransactionalWorkinDb2(); TransactionalWorkinSql(); scope.Complete(); }
结果将是跨越DB2和SQL的分布式事务,但如果您看到我的意思,它不是参与分布式事务的组件.
另一种方法是使用EnterpriseServices/COM +模型来定义执行某些操作的组件,并将该组件标记为事务性.这也有效,但不需要在.NET中执行分布式事务.