C#使用System.Data.OracleClient連接Oracle數據庫。之前在WinXP上正常運行的程序移植到Windows 2008 x64上之后就連不上數據庫了,錯誤信息如下:
啟動database2sharp工具時提示:
數據連接不成功,請檢查該數據庫是否已啟動嘗試加載oracle客戶端時引發BadImageFormatException.如果在安裝32位Oracle客戶端組件的情況下以64位模式運行,將出現此問題。
錯誤原因是原來WinXP機子上所安裝的OracleInstantClient是32位,所以編譯的程序所用的OracleClient也是32位的,從而導致兼容問題。當然,如果在64位操作系統上重新安裝64位的Oracle客戶端再重新編譯程序也是能解決問題的。這里我們介紹一種簡單的方法來移植程序。
實際上,System.Data.OracleClient所指向的是PATH環境變量下的oci.dll。因此,我們只要讓程序能夠找到64位的oci.dll就可以了。方法如下:
1. 下載instantclient-basic-win-x86-64-11.1.0.7.0.zip,並解壓,如C:\instantclient-basic-win-x86-64-11.1。
2. 在系統的環境變量PATH中加入以上路徑。
之后再運行程序,程序會依照PATH路徑尋找oci.dll,如果遇到32位的oci.dll會自動略過,找到64位的oci.dll就能連接上數據庫了。
上面是網上的解決方法,我機器WIN8.1 64位 。安裝了oracle 11XE 64位操作系統,C#調試運行出現如標題的錯誤。試了上面的解決方法不行。但是上面給了一個很好的思路就是,調用oracleclient的時候出錯了。我安裝了一個32位客戶端,就可以了。版本如下
instantclient-basic-win32-11.2.0.1.0