C#,delphi7在64位作業系統上連線Oracle 11g的問題和解決方案 BadImageFormatException
環境:windows2008R2企業版64位,安裝Oracle 11g 64位版服務端。C#3.5開發的b/s系統,32位版。delphi7開發的c/s服務
錯誤提示:
Oracle 11g 64位版在64位作業系統上連線Oracle的問題和解決方案 BadImageFormatException
同時解決Delphi7.0採用Oledb連結64位oracle11g出現密碼不正確的問題。
嘗試載入Oracle客戶端庫時引發BadImageFomatException。如果在安裝32位Oracle客戶端元件的情況下以64位模式執行,將出現此問題。
錯誤原因是原來WinXP機子上所安裝的OracleInstantClient是32位,所以編譯的程式所用的OracleClient也是32位的,從而導致相容問題。當然,如果在64位作業系統上重新安裝64位的Oracle客戶端再重新編譯程式也是能解決問題的。這裡我們介紹一種簡單的方法來移植程式。
如果在伺服器端安裝32位的oracle9i客戶端,要注意密碼的大小寫的問題,9i客戶端預設會把密碼轉換成大寫,要特別注意。
總之解決問題的方法是:在服務端再安裝一個Oracle 11g 32位版的客戶端
我的奮鬥-System.Data.OracleClient on Windows 2008 x64
自從家中與公司的機器分別改用Vista x64及Windows 2008 x64後,在享受爽快揮霍記憶體之餘,也一併開始體驗在新大陸拓荒的感覺。大部分的高階應用程式,多半可以x86虛擬環境執行,問題不大。但有不少涉及低階處理的程式選擇頓時劇減,例如: RamDisk因為Driver未具備簽章無法使用、能支援x64的免費防毒軟體屈指可數、之前提到重新Survey了
這些軟體上的短缺咬一咬牙就撐過了,最讓我痛苦的是原本部門大家慣用的ODP.NET 9207完全不支援x64版本,安裝程式根本沒法跑!
Google之後,知道Oracle 10.2g開始Support Vista/Windows 2008 x64,但無奈ORACLE網站不知怎麼,連續好幾天,下載連結都出現HTTP 404。最後終於在兩週後讓我下載到近500M的10204_vista_w2k8_x64_production_client.zip,安裝完成馬上用現有的專案試了一下,結果出現:
System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
檢視許可權等OK,試了一下重新開機,訊息變了:
System.InvalidOperationException: Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed. ---> System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B).
似乎是DLL版本不對,但我明明裝的是64bit Oracle Client,.NET程式限定Build for x86 CPU,為什麼跟我說: 在64 Mode下去讀了32bit Oracle Client? 感覺上恰恰相反才對。
反覆測試,忽然發現如果設定Build for AnyCPU或x64就可以順利連上Oracle,唯獨設成x86時會出現上述疑似相反的錯誤。設成x86時去讀取64bit Oracle Client DLL會發生問題,十分合理,只是一開始的錯誤訊息讓我有些迷惑。如果這是問題,那麼是否同時再裝32bit Oracle Client就好? 但,System.Data.OracleClient要如何知道該用32bit或64bit Oracle Client? 我每次都要改Registry或設PATH環境變數來切換使用的Client嗎? 一切的疑問,都要試了才知道!!
找到10203_vista_w2k8_x86_production_client.zip,裝在另一個目錄下(c:\oracle\ora10g vs c:\oracle\ora10g_x86),重新登入讓PATH環境變數中的c:\oracle\oar10g_x86\bin生效,x86就可以跑了。抱著期待的心情切成x64再跑,Yes! 也成功了!! 但這是x64 .NET用32bit Oracle Client的結果嗎?
使用Process Monitor解開了疑惑: System.Data.OracleClient會沿著PATH環境變數的路徑去找oci.dll,在x64下會略過c:\oracle\ora10g_x86\bin\oci.dll,找到c:\oracle\ora10g\bin\oci.dll後連線;x86時則是找到c:\oracle\ora10g_x86\bin\oci.dll就結束尋找,AnyCPU則與x64的行為相同。
(記得之前的PB6連Oracle9嗎? 一樣是用PATH法)
換句話說,OracleClient會依x64/x86決定適當的Oracle Client版本,不必勞煩我去手工切換。因此,如果想在Windows 2008/Vista x64上使用System.Data.Oraclient,最好32bit/64bit兩種10.2+版本的Oracle Client都要裝,並確定PATH變數中二者的bin目錄都有在其中,一切就搞定了。
說來簡單,卻花了我好幾個星期才解決,希望這點心得對其他也在x64叢林中挺進的同胞們有些幫助。
相關推薦
C#,delphi7在64位作業系統上連線Oracle 11g的問題和解決方案 BadImageFormatException
環境:windows2008R2企業版64位,安裝Oracle 11g 64位版服務端。C#3.5開發的b/s系統,32位版。delphi7開發的c/s服務 錯誤提示: Oracle 11g 64位版在64位作業系統上連線Oracle的問題和解決方案 BadImageFor
libcurl在centos6.4 64位作業系統上不支援https的解決方案
問題: 在程式內使用libcurl庫訪問https的網址時,始終返回 CURLE_UNSUPPORTED_PROTOCOL 經查詢發現是libcurl庫檔案編譯時沒有選擇支援ssl,預設的li
C#在64位作業系統上用X86方式連線64位Oracle的問題和解決方案
C#使用System.Data.OracleClient連線Oracle資料庫。之前在WinXP上正常執行的程式移植到Windows 2008 x64上之後就連不上資料庫了,錯誤資訊如下: 嘗試載入Oracle客戶端庫時引發BadImageFomatException。
CC2540是一款高性價比,低功耗片上系統(Soc)解決方案,它適合藍牙低功耗應用領域
數字 醫療 保持 國內 定時 技術 定位 集成電路 性能 CC2540是一款高性價比,低功耗片上系統(Soc)解決方案,它適合藍牙低功耗應用領域,極少的外圍元器件以及強大網絡節點建立成為可能。CC2540是一款含有高速和低功耗8051內核的RF收發器。適用於低功耗系統,有超
用Navicat連線Oracle資料庫出錯解決方案
用Navicat連線Oracle資料庫時出現如下錯誤 上網一查原來是oci.dll版本不對。因為Navicat是通過oracle客戶端連線Oracle伺服器的,Oracle的客戶端分為兩種,一種是標準版,一種是簡潔版,即Or
ireport連線Oracle字符集亂碼解決方案
ireport與oracle連線,資料來源連上了,可是取出的中文欄位都是亂碼 select userenv('language') from dual; SIMPLIFIED CHINESE_CHINA.US7ASCII 通過查詢,字符集為us7ascii 解決辦法 :
可以ping通,但無法通過ssh連線虛擬機器的解決方案
今天在虛擬機器上裝了一個 Linux 玩玩, 但在啟動 Linux 後,在 Windows 中通過 Xshell 以 SSH 方式連線到 Linux 時卻連線不上,於是開啟 CMD 視窗,輸入了 ping 192.168.220.128,返回結果顯示可以拼通: Pin
剛入門,對於浮動float的作用、影響和解決方案和它們的缺點
浮動的作用 1、是為了讓元素並排 2、轉換行級標籤成塊級標籤,使其可以設定寬高使用浮動帶來的影響 脫離文件流,對其後面緊隨的元素產生影響,進行覆蓋,優先顯示 清除浮動解決方案 (1)浮上去的元素,給它設定float:left;讓它也浮動起來,但是它的結構便不是自然的結構了,
C# 連線Oracle 11g,(注:可少走彎路)
string connString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=130.147.246.144)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ECMS)));Persist Secur
linux centOs中安裝好資料庫,客戶端用plsql連線oracle
原創作品,轉載請在文章顯眼位置註明出處:https://www.cnblogs.com/sunshine5683/p/10030375.html 首先,回顧上篇 CenOs7安裝oracle圖文詳細過程(02) ,安裝好oracle後再伺服器端使用sqlplu
Oracle資料庫安裝+漢化版PLsql+Oracle外掛,plsql連線Oracle步驟和報錯解決辦法
從https://download.csdn.net/download/fxiaoyaole/10449523 此連結下載裡面有所資源,資源包括(Oracle兩個資料庫壓縮包win64_11gR2_database_1of2, win64_11gR2_database
centos7 64位系統jdbc連線oracle報錯問題
這兩天發生了一個錯誤,感覺挺奇葩的,記錄下來,哈哈。 報錯如下: ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is
16位,32位,64位作業系統下,各型別的長度整理
特別是int相關的型別在不同位數機器的平臺下長度不同。C99標準並不規定具體資料型別的長度大小,只規定級別。作下比較: (1)16位平臺 char 1個位元組8位
C#連線Oracle 11g 無需安裝Oracle客戶端
1.首先到Oracle網站上下載ODAC 下載地址1:http://download.csdn.net/detail/easyboot/9456476 下載地址2:http://www.oracle.com/technetwork/topics/dotnet/downloa
kettle在64位作業系統上的配置
1. Download swt.jar for Win642. create folder \libswt\win64 and paste the downloaded swt.jar3. copy the following files from \libswt\win3
關於JavaMail 發郵件,本地傳送成功,linux伺服器上傳送連線超時問題的解決方案
伺服器上報錯資訊 send mail err:Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn’t connect
64位CPU,64位作業系統,和64位應用程式三者之間的關係
64位CPU 目前市面上的CPU都是64位且相容32位的CPU,既支援64位指令集,也支援32位指令集。在這樣的CPU上面,既能安裝64位作業系統,也能安裝32位作業系統。 64位作業系統 目前主流作業系統都是64位作業系統。只有64位作業系統才能發揮CPU中的64位指令
在64位作業系統上執行32位的程式
執行 32 位程式 WOW64 子系統使 32 位程式能夠在基於 x64 版本的 Windows Server 2003 和 Windows XP 專業 x64 版的執行而不用修改。WOW64 子系統是通過在基於 x64 版本的 Windows Server 2003 和
Linux(CentOS6_64位)下安裝Oracle 11g
用戶組 root images img roo bsp 最小化安裝 inux .sh 前提: 1、請務必在win下安裝Oracle至少5遍。 2、請務必掌握基本的Linux命令。 準備好Oracle linux64位安裝包(官方下載2個壓縮文件)準備好虛擬機VMware
C# FileStream進行FTP服務上傳文件和下載文件
兩個 upload open object private 原因 als down adc 定義FileStream類的操作類:操作類名: FtpUpDown 上傳文件 /// <summary> /// 上傳文件 /// <