Распределенная транзакция из .NET в DB2 - PullRequest
0 голосов
/ 02 апреля 2009

У меня есть проблема, когда мне нужно вызвать AS400 db2, чтобы вызвать серию хранимых процедур вставки / обновления из моей .net, а затем обновить несколько таблиц SQL2005, если все в базе данных AS400 идет нормально. Драйвер, который я использую, не имеет распределенных транзакций, поэтому мне было интересно, можете ли вы использовать какой-либо из драйверов IBM iSeries для DB2 для создания компонента COM + / .NET, который будет участвовать в распределенной транзакции. Пожалуйста, дайте мне знать, если кто-то делал что-то подобное раньше, или любые указатели будут с благодарностью.

1 Ответ

6 голосов
/ 02 апреля 2009

Какой драйвер вы используете?

IBM Connect DB2 поддерживает распределенные транзакции, управляемые Windows DTC.

Драйвер DB2 от Microsoft, который входит в состав Microsoft Host Integration Server, также выполняет транзакции.

Я слышу от тебя две разные вещи. Вы хотите сделать транзакцию, которая охватывает SQL и DB2. а также вы хотите создать компонент, который участвует в распределенной транзакции. Это можно сделать вместе, но первое не требует второго.

Используя классы System.Transactions в .NET 2.0, вы можете сделать это:

  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.

...