2016-02-10 101 views
0

我目前的應用程序在一個巨大的使用語句與連接的所有數據庫操作,以確保事務提交或回滾完全,當前如果我有通用的方法,他們通過當前打開的OleDbConnection它可以被使用。C#與OleDB和Oracle的TransactionScope

我想使用TransactionScope來代替外部使用部分。請參閱我的測試代碼如下:

private void Test() {   
    string _connectionString = "Provider=OraOLEDB.Oracle.1;Password=XXXXXXXX;Persist Security Info=True;User ID=XXXXXXXX;Data Source=XXXXXXX;min pool size=1;incr pool size=5;decr pool size=2;connection timeout=60;"; 
    using (TransactionScope _ts = new TransactionScope(TransactionScopeOption.Required)) 
    { 
     using (OleDbConnection _cn = new OleDbConnection(_connectionString)) 
     { 
      _cn.Open(); // Errors Here! 
      using (OleDbCommand _cmd = new OleDbCommand()) 
      { 
       _cmd.Connection = _cn; 
       _cmd.CommandText = "insert into testtable (TEST) values ('FIRST')"; 
       _cmd.CommandType = CommandType.Text; 
       _cmd.ExecuteNonQuery(); 
      } 
     } 

     using (OleDbConnection _cn = new OleDbConnection(_connectionString)) 
     { 
      _cn.Open(); 
      using (OleDbCommand _cmd = new OleDbCommand()) 
      { 
       _cmd.Connection = _cn; 
       _cmd.CommandText = "insert into testtable (TEST) values ('SECOND')"; 
       _cmd.CommandType = CommandType.Text; 
       _cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

我收到的錯誤是「無法登記交易。」我讀過Oracle不喜歡使用TransactionScope(Problems with TransactionScope and Oracle),但它似乎符合我需要實現的功能。我發現關於如何跨連接池連接橋接單個事務的信息非常少。

編輯 - 2月11日

我從OLEDB切換到ODP.Net並設法得到一個官方的Oracle ORA錯誤了......

ORA-02048: attempt to begin distributed transaction without logging on 
從我可以找到

可悲的是,我認爲它的Oracle錯誤?我發現論壇帖子暗示版本10.2.0.2有這個bug,但我在10.2.0.4?

希望有人能幫助!由於

回答

0

所以,我的回答是兩件事情:

首先,我需要我的客戶端上安裝OracleMTS服務。其次我從OleDB(通過Oracle.ManagedDataAccess v12)更改爲Oracle.DataAccess v11,它的工作原理!

我發現ODP.Net客戶端和10.2.0.4的v12有一個分佈式事務失敗的錯誤,但版本11工作。仍然困惑爲什麼它不適用於OleDB,但我現在解決了它。希望這可以幫助我的位置上的其他人!