从.NET到DB2的分布式事务

chu*_*h97 0 .net db2 com+ ibm-midrange

我有一个问题,我必须调用AS400 db2从我的.net调用一系列插入/更新存储过程,然后更新一些SQL2005表,如果AS400数据库中的所有内容都很好.我正在使用的驱动程序没有分布式事务,因此我想知道您是否可以使用任何IBM iSeries Drivers for DB2来创建将参与分布式事务的COM +/.NET组件.请让我知道,如果之前有任何人做过这样的事情或任何指针将不胜感激.

Che*_*eso 6

你在用哪个司机?

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();
  }
Run Code Online (Sandbox Code Playgroud)

结果将是跨越DB2和SQL的分布式事务,但如果您看到我的意思,它不是参与分布式事务的组件.

另一种方法是使用EnterpriseServices/COM +模型来定义执行某些操作的组件,并将该组件标记为事务性.这也有效,但不需要在.NET中执行分布式事务.