私は、2 つのテーブル (1 つは MS SQL Server テーブル、もう 1 つは Informix Dynamic Server テーブル) に単純な挿入を行う、概念実証の分散トランザクション アプリケーションを少し持っています。問題は、例外がスローされたときに発生します。Informix 用の OLE DB ドライバーを使用すると、すべて正常に動作します。両方の挿入がロールバックします。.NET Data Provider for 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();
}
}
接続文字列: