0

我有一个问题,我必须调用 AS400 db2 从我的 .net 调用一系列插入/更新存储过程,然后如果 AS400 db 中的一切正常,则更新一些 SQL2005 表。我使用的驱动程序没有分布式事务,所以我想知道您是否可以使用任何 IBM iSeries Drivers for DB2 来创建一个参与分布式事务的 COM+/.NET 组件。请让我知道是否有人以前做过类似的事情,或者任何指针将不胜感激。

4

1 回答 1

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();
  }

结果将是一个跨越 DB2 和 SQL 的分布式事务,但它不是参与分布式事务的组件,如果您明白我的意思的话。

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

于 2009-04-02T16:17:56.410 回答