У меня есть небольшое приложение для распределенных транзакций, проверяющее концепцию, которое выполняет простую вставку в две таблицы: одну - таблицу MS SQL Server, другую - таблицу Informix Dynamic Server. Проблема возникает, когда выдается исключение. Если я использую драйвер OLE DB для Informix, все работает нормально - обе вставки откатываются; если я использую провайдер данных .NET для Informix, вставка Informix не откатывается.
У кого-нибудь есть идеи относительно того, что происходит?
В фрагменте кода вы заметите закомментированный метод EnlistTransaction (). При явном вызове я получаю исключение, указывающее, что метод не реализован.
Фрагмент кода:
private void doTransaction(Boolean commitIndicator)
{
using (TransactionScope tscope = new TransactionScope())
{
using (SqlConnection cn = new SqlConnection { ConnectionString = sql2008Settings.ConnectionString })
{
cn.Open();
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText = "insert into uom (uom) values ('Test')";
int count = cmd.ExecuteNonQuery();
}
}
using (IfxConnection cn = new IfxConnection())
{
cn.ConnectionString = idnSettings.ConnectionString;
cn.Open();
//cn.EnlistTransaction(Transaction.Current);
using (IfxCommand cmd = cn.CreateCommand())
{
cmd.CommandText = "insert into table_ (code_, description) values ('JEP', 'Test')";
int count = cmd.ExecuteNonQuery();
}
}
if (commitIndicator)
{
}
else
{
throw new Exception("planned failure");
}
tscope.Complete();
}
}
Строки подключения: