Распределенная транзакция из .NET в DB2

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


person chugh97    schedule 02.04.2009    source источник


Ответы (1)


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

IBM DB2 Connect поддерживает распределенные транзакции, управляемые 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.

person Cheeso    schedule 02.04.2009