Informix .NET Provider和TransactionScope不回滚

时间:2010-01-21 17:46:04

标签: informix transactionscope

我有一个小概念概念分布式事务应用程序,可以简单地插入两个表 - 一个是MS SQL Server表,另一个是Informix Dynamic Server表。抛出异常时会出现问题。如果我使用Informix的OLE DB驱动程序,一切正常 - 两个插入回滚;如果我使用.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();
    }
}

连接字符串:              

1 个答案:

答案 0 :(得分:1)

我很确定Informix .Net ADO Provider不支持TransactionScope。这不是ADO.Net提供商的要求。

您可以通过使用COM +和MSDTC来实现此功能,因为Informix支持它。您需要执行以下操作:

  • 将“enlist = true”添加到您的连接字符串
  • EnterpriseServicesInteropOption.Full添加到您的TransactionScope构造函数