關於C#訪問Oracle數據庫的時候,必須安裝Oracle客戶端,而且必須安裝和服務器相同的版本,否則會出現各種版本的不兼容問題,所以很多時候我們並不需要去安裝完整的Oracle客戶端,為了方便部署連接oracle的.net程序,oracle官方提供了一個簡化版的client,即instant client。通過instant client和ODP.net中的Oracle.DataAccess.dll,我們就可以方便的部署.net應用程序或者站點。
1 下載和服務器對應的instant client版本。
下載的地址如下:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html,進入之后下載對應的版本號(首先選擇對應的操作系統,然后再選擇具體的版本號),下載完成之后就是安裝的過程,安裝完成后就是詳細配置環境變量和配置PL\SQL的過程了,這里也不再贅述,參考一下下面的一片博客:
http://www.linuxidc.com/Linux/2015-02/114226.htm
2 C#訪問Oracle數據庫
配置好了,關鍵的問題就是如何去用C#去連接Oracle數據庫,然后再去讀取數據呢?
這里也有很多種方法,但總結一番也就是使用Oracle官方提供的Oracle.DataAccess.dll或者是托管的Oracle.ManagedDataAccess.dll這些DLL來訪問Oracle數據庫,下面提供了一種方法來連接數據庫。
http://www.cnblogs.com/wang_yb/archive/2011/07/11/2103368.html
弄清楚了這些最基本的原理,我們的思路就會相當明確,無非就是使用Oracle客戶端中的核心DLL來訪問Oracle數據庫服務端,那么究竟需要哪些重要的DLL呢?再看下面的這些專門寫這些程序的博客。
http://blog.csdn.net/yenange/article/details/12188731
其實這些DLL在instant client安裝完成以后,我們都可以在其安裝包中找到,我們可以這么理解instant client就是為.net提供一個精簡版的客戶端去訪問Oracle數據庫。這些核心的DLL如下圖所示:

其實甚至連安裝簡易版的客戶端都不需要了,了解安裝過程應該知道,安裝的過程出了設置一些環境變量、寫注冊表、等其他的操作外,只不過是將安裝的文件從安裝包拷貝到指定的安裝目錄中的過程,所以我們甚至只需要在安裝包中解壓,找到這些DLL中,然后直接拷貝到exe目錄中,程序就可以訪問Oracle數據庫了,具體在哪個目錄下,請參考下面的一片博客:
http://blog.csdn.net/ikmb/article/details/5825047
上面的整個分析過程是在閱讀大量博客之后做的一個小的總結,關鍵是要通過實際的安裝部署操作才能夠真正地去掌握,從而最終吃透這些。
這篇文章除了詳細介紹如何一步步化繁為簡去訪問Oracle數據庫以外,另外在64位環境中使用32位Oracle客戶端去訪問Oracle數據庫的時候,還是提示“無法找到或者加載Oracle.DataAccess.dll程序集”這個問題百思不得其解,明明把所有的Oracle核心DLL都拷貝到應用程序中,而且客戶端和服務端版本完全匹配的情況下,還是提示這個信息,最后找到了問題的答案,原來是計算機安裝64位操作系統,而我們發布程序的時候選擇的是Any CPU,這樣我們的應用程序也是64位的,這在訪問很多32位DLL的時候往往會出現很多的找不到DLL的情況,那么我們對編譯的平台 Any CPU、x86、x64到底了解多少呢?
網上也有很多這樣的文章,但是一致的結論就是:主程序和其引用的類庫在運行時的平台應該保持一致。
那么報出上面的錯誤也就非常正常了,由於我們發布的主程序的目標平台為:Any CPU 而且我們最終使用的環境為64位操作系統,所以主程序在64位CLR下面運行,當我們全部添加了引用的DLL之后,仍然還是提示“無法找到或者加載Oracle.DataAccess.dll程序集”這類問題的時候就會多了一個分析問題的方向,是否是主程序和類庫的版本不匹配的問題,這些小問題都值得我們去深入思考,下面貼出幾篇值得參考的相關博客:
http://blog.csdn.net/lordwish/article/details/52312015
http://blog.csdn.net/g710710/article/details/23161807
http://blog.csdn.net/zuguangboy/article/details/51509670
