2010-01-21 39 views
1

我有一個小概念驗證分佈式事務應用程序,它將一個簡單的插入到兩個表中 - 一個是MS SQL Server表,另一個是Informix Dynamic Server表。出現異常時會出現問題。如果我使用Informix的OLE DB驅動程序,一切正常 - 兩個插入回滾;如果我使用Informix的.NET數據提供程序,則Informix插入不會回滾。Informix .NET Provider和TransactionScope不回滾

有沒有人對發生了什麼有什麼想法?

在代碼片段中,您會注意到註釋掉的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

我敢肯定,在Informix淨ADO提供程序不支持的TransactionScope。這不是ADO.Net提供者的要求。

您可能會通過使用COM +和MSDTC來實現這一目標,因爲Informix確實支持該功能。你需要做到以下幾點:

  • 加入「爭取= true」將連接字符串
  • 添加EnterpriseServicesInteropOption.FullTransactionScope構造
+0

優秀!更改我的TransactionScope構造函數的竅門,不需要進一步的更改。謝謝。 我已經在我的連接字符串中有enlist = true,但我認爲我搞砸了發佈我的XML的東西。 – 2010-01-21 18:17:29