C# 使用OCCI 串連Oracle 資料庫

來源:互聯網
上載者:User

最近因需要研究了一下C#向Oracle資料庫中插入資料的問題,通常情況下使用微軟內建的組件ADO.NET來串連並操作資料庫,這也是最簡便的方式,用法也比較簡單,即在程式開頭加上using System.Data.OracleClient。另外就是使用Oracle提供的ODP.net,這需要下載ODAC,並在程式中引用Oracle.DataAccess.dll。

接下來寫程式測試向資料庫中插入記錄的速度了,首先嘗試使用ADO.net。

部分代碼如下:

  1. OracleConnection conn=new OracleConnection(“Data Source=db;User id=user;Password=pass”);  
  2. conn.Open();  
  3. OracleCommand cmd=new OracleCommand();  
  4. cmd.Connection=conn;  
  5. OracleTransaction trans=conn.BeginTransaction();  
  6. cmd.Transaction=trans;  
  7. Stopwatch stp=new Stopwatch();  
  8. cmd.CommandText=”insert into dbk_test values(to_date(’2012-06-05 10:00:00′,’yyyy-mm-dd hh24:mi:ss’),’1234567890′,’987654321′,’This is a test message’)”;  
  9. for(int i=0;i<20000;++i)  
  10. {  
  11. cmd.ExecuteNonQuery();  
  12. if(i%1000==0)  
  13. trans.Commit();  
  14. }  
  15. trans.Commit();  
  16. conn.Close();  
  17. stp.Stop();  
  18. Console.writeLine(“Time Elapsed:”+stp.ElapsedMilliseconds+”ms”);  

C#程式運行在Windows Server 2008 32位上,機器為Xeon E552O * 2,2.27Ghz,共16核記憶體12GB。Oracle 安裝在RedHat AS4U4,cpu為AMD Opterron 275 * 2 ,2.2GHz,共4核心,記憶體16GB,oracle 10g。
測試結果為33秒左右,每秒插入不到700條,之後也採用了綁定變數及調用預存程序等方法,插入速度也沒有多大提高。

於是想到了用ODP.net,在網上查到說ODAC的版本必須與安裝的oracle對應,雖然這個要求感覺不太靈活,因為實際的使用環境可能與開發環境不一致,到時還要更換ODAC的版本,且ODAC在官網上並不是能對應上所有的Oracle版本。在網上看到使用ODP.net插入速度可以達到數萬條每秒,但我多次嘗試時,都在運行時出現問題,根本無法運行成功。於是便放棄了。Oracle與MS的東西相容性不強,或者說是Oracle本身向下相容的能力弱,真是令人抓狂。

多方尋找後發現了OCI這個東西,於是想到了使用封裝了OCI的OCCI,這樣眼前突然一亮。之後的思路就很清淅了,先用c++做一個dll,裡面的函數是對OCCI的進行一步封裝,再用c#調用這個dll就可以了。下面就是實現的具體過程了。

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.