2010-08-16 91 views
2

我的系統在將數據寫入Oracle(10g)數據庫之前,先將一些數據寫入SQL Server數據庫(2008),稍後再提取並處理它。使用TransactionScope和System.Data.OracleClient - TransactionAbortedException

我已經在TransactionScope中包裝了我的SQL Server交互,但是當我嘗試使用與Oracle交互相同的想法時,我得到一個`TranactionAbortedException - 「事務已中止」。

刪除TransactionScope,一切正常。

我總是可以恢復到手動管理自己的交易,但我希望有一個簡單的解決方案。

示例代碼:

private static void OracleTest() 
    {   
     using (TransactionScope ts = new TransactionScope()) 
     { 
      using (OracleConnection conn = new OracleConnection(connString)) 
      { 
       try 
       { 
        using (OracleCommand cmd = new OracleCommand()) 
        { 
         cmd.CommandText = "MyPackage.MyFunction"; 
         cmd.CommandType = System.Data.CommandType.StoredProcedure; 
         cmd.Connection = conn; 

         OracleParameter param = cmd.Parameters.Add(new OracleParameter("field1_", "abc123")); 

         param = cmd.Parameters.Add(new OracleParameter("rs_", OracleType.Cursor)); 
         param.Direction = System.Data.ParameterDirection.Output; 
         conn.Open(); 
         using (OracleDataReader dr = cmd.ExecuteReader()) 
         { 

我沒有發現任何表明您不能使用TransactionScopes與Oracle,但你可以從我的例子中看到,我們在第一障礙落下(當我們打開連接時),所以很難看到我可能會出錯的地方。

回答

相關問題