在C#中,不安裝Oracle客戶端如何連接Oracle數據庫


本方法優點: 1、程序內集成Oracle客戶端,無需用戶自行進行配置

本方法缺點: 2、增加程序包的體積(Oracle instant client本身有幾十兆大小)

下面說一下如何實現。

  • 0、首先,從Oracle網站上下載對應版本的Oracle instant client包,網址在這里 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 由於是Windows程序,只需要下載Win32或64版本就行了。
  • 1、下載來的.zip壓縮包,解壓后應該有如下文件:(我使用的是10G版本,11可能略有不同) classes12.jar oci.dll ocijdbc10.dll ociw32.dll ojdbc14.jar Oracle.DataAccess.dll orannzsbb10.dll oraocci10.dll oraociei10.dll OraOps10.dll 其中Oraociei10.dll體積最大,可能封裝了一些資源文件。
  • 2、在你的工程根目錄下新建一個”Oracle”的文件夾(其實名字和位置隨便定),然后將上述文件拷貝到里邊,並在Visual Studio中添加這個文件夾及文件們。保證你的解決方案里能看到它們。
  • 3、在Visual Studio IDE的“解決方案資源管理器”里,打開Oracle文件夾,選中里邊所有的文件,在“屬性”“復制到輸出目錄”里設置“如果較新則復制”,這樣在編譯或者發布程序的時候,Oracle文件夾會隨着發布到exe所在的地方,部署時候就不會出現找不到Oracle庫的情況。
  • 4、按照網上的大多數教程,這個時候就需要在widnows環境變量里邊添加東西了。其實這一步不是必須的,因為考慮到不同的客戶環境,有可能用戶沒有權限在他的計算機上操作這些,那么我們把設置Oracle環境變量放到程序里來做。那么在你初始化程序之后,使用Oracle之前,需要添加如下代碼:

    string oraclePath = System.Windows.Forms.Application.StartupPath + @"\oracle"; Environment.SetEnvironmentVariable("PATH", oraclePath,EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process);

    解釋一下上面的代碼: string oraclePath = System.Windows.Forms.Application.StartupPath + @"\oracle"; 這一句取得了oracle 驅動文件夾的位置,也就是放oci.dll的地方。

    Environment.SetEnvironmentVariable("PATH", oraclePath,EnvironmentVariableTarget.Process); 這一句設置環境變量“PATH”,寫入oracle驅動所在的文件夾,第三個參數表示這個PATH只在當前進程起作用,不會修改電腦本身。 注意:如果你用到某些外部程序,還有其他PATH變量要設置,在這里加入就行了。具體方法參見.net相關文檔。

    Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process); 這一句,設置Oracle在通訊過程中使用的語言和字符集。我的項目用的是上面的字符集,對應到你的項目,可用SQL語句去oracle數據庫中查詢。這個語言和字符集一定要和服務器一致,否則可能會出現亂碼甚至無法連接。可能會用到如下SQL語句: //select userenv('language') from dual; 查詢服務端字符集,用來設置上面的參數。 //select * from nls_database_parameters;//服務器字符集 //select * from nls_instance_parameters;//ora文件定義字符集 //select * from nls_session_parameters; //會話字符集

  • 5、理論上,經過上面的設置,你的程序就可以使用內置到exe目錄下的Oracle驅動了,這里要注意的還有就是連接數據庫的方式,上面的修改並不能保證你可以使用tns名來連接,因此連接字符串要做如下修改:

    在app.config中修改connectionString為 Persist Security Info=True;User ID=數據庫用戶名;Password=數據庫密碼;Unicode=True;Data Source= (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 服務器IP地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 服務器上的數據庫實例名))); 這個主要是把“Data Source”這部分直接用tcp/ip字符串方式替換了(通常Data Source是寫tns名稱的)

  • 6、好了,運行你的程序試試看吧。

最后,如果你還是習慣寫tns名稱來訪問oracle數據庫,那么還要做以下工作。 (注意,以下未測試

  • a.在程序的Oracle文件夾下增加tnsnames.ora,並將tns名稱的配置寫到里邊去。
  • b.在程序設置環境變量的地方,加入 Environment.SetEnvironmentVariable("TNS_ADMIN", oraclePath,EnvironmentVariableTarget.Process);
  • c.連接字符串里應該可以使用tns名稱了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM