Client使用c#和odp.net串連server oracle

來源:互聯網
上載者:User

Oracle.DataAccess.dll有2.X版本和4.X版本,VS2008開發用2.X

所需的DLL可以從已安裝的client中拷

 

由於微軟在.net framework4中會將System.Data.OracleClient.dll deprecated,而且就訪問效率和速度而言,System.Data.OracleClient.dll與 Oracle.DataAccess.dll相比,微軟的確實沒有oracle提供的類庫有優勢,所以我放棄了使用多年的 System.Data.OracleClient.dll,取而代之的是odp.net。然而odp .net 的優點不止這些,還包括:

1、不在安裝用戶端也能訪問伺服器上的oracle(假設Application Server與DB Server 分開)

2、不需要配置TnsNames.Ora檔案

當然,我選擇odp .net的最主要的原因還是效能。這篇文章列舉了兩者之間的對比。Technical Comparison: ODP .NET Versus Microsoft OracleClient

下面我將介紹如何在一個在新的項目中使用odp .net。環境配置:A機器,運行C#程式,沒有安裝oracle資料庫或者用戶端等任何oracle的產品;B機器就運行著一個oracle9i資料庫,再沒安裝過其它oracle產品

首先要下載odp .net檔案,可以在這個頁面下載Oracle Data Access Components (ODAC) Downloads ,我下載的是Oracle 11g ODAC 11.1.0.7.20 with Oracle Developer Tools for Visual Studio這個版本。

下載完成之後不用安裝,將Oracle.DataAccess.dll檔案從 ODTwithODAC1110720.zip/stage/Components/oracle.ntoledb.odp _net_2/11.1.0.7.10/1/DataFiles/filegroup4.jar檔案中解壓出來就行,然後複製到項目中,再添加引用Oracle.DataAccess.dll。
編寫如下代碼:

using Oracle.DataAccess.Client; 

... 

string connstring = 

   "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))" + 

   "(CONNECT_DATA=(SID=orcl)));User Id=sys;Password=sys;" ; //這個也可以放到Web.Config中。 

using (OracleConnection conn = new OracleConnection(connstring)) 

   conn.Open(); 

   string sql = "select * from users" ; 

   using (OracleCommand comm = new OracleCommand(sql, conn)) 

   { 

     using (OracleDataReader rdr = comm.ExecuteReader()) 

     { 

       while (rdr.Read()) 

       { 

         Console.WriteLine(rdr.GetString(0)); 

       } 

     } 

   } 

代碼編寫好以後,還要從下載的壓縮包中取出幾個dll檔案。
1、oci.dll (在jar檔案裡面叫’oci.dll.dbl’,拿出來之後去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)
2、oraociicus11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)
3、OraOps11w.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.ntoledb.odp _net_2/11.1.0.7.10/1/DataFiles/filegroup3.jar)

下面這三個有人說需要,有人說不需要,反正也不差這三個,繼續吧:
4、orannzsbb11.dll (in ODTwithODAC1110720.zip/stage/Components/oracle.ldap.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup1.jar)
5、oraocci11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)
6、ociw32.dll (在jar檔案裡面叫’ociw32.dll.dbl’,拿出來之後去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)
最後把這個DLL複製到項目中,CS的要與exe一個檔案夾,B/S的有專門的bin目錄。

當然,使用一項新技術,必然會遇到一些錯誤:以下是我遇到的:

1、啟動並執行時候遇到這個異常提示’The provider is not compatible with the version of Oracle client’,不要緊張,檢查一下上面所用到的dll是否齊全就OK。

2、“找不到請求的 .Net Framework 資料提供者。可能沒有安裝。”這個錯誤提示是因為在machine.config中找不到Oracle.DataAccess.dll,將下面的代碼放到

< DbProviderFactories ></ DbProviderFactories > 

之間就OK。

< add name = "Oracle Data Provider for .NET" invariant = "Oracle.DataAccess.Client" description = "Oracle Data Provider for .NET" type = "Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 

註:如果下載的不是ODTwithODAC1110720,有可能 dll的位置不像是上面提到的那樣,需要自己去挨個找了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.