我有一个小的概念验证分布式事务应用程序,它正在对两个表进行简单的插入——一个是 MS SQL Server 表,另一个是 Informix Dynamic Server 表。当抛出异常时,问题就来了。如果我使用 Informix 的 OLE DB 驱动程序,一切正常——两个插入都回滚;如果我为 Informix 使用 .NET 数据提供程序,则 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();
}
}
连接字符串: