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