嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。問題記錄


電腦是win8 64位,安裝oracle 11g r2 64位的,誰知道一切裝完畢后,打開項目卻連不上oracle數據了...
首先是pl/sql連不上,裝了oracle服務器,應該是不用再裝客戶端,pl/sql應該就能連上的,應為oracle服務器版本自帶了客戶端的那些管理工具和功能。但是pl/sql一直報個錯啊!大概意思是說找不到32位的oci.dll文件之類的錯誤,網上一搜,說pl/sql裝在64位系統上,要連64位的數據庫,還得裝個32位的客戶端。而我又不想再去裝個客戶端了,感覺太大了,再說裝了oracle數據庫,應該是不用再裝客戶端了的。無奈只好下了個IntantClient(輕量級客戶端包)。下面說說這個IntantClient(輕量級客戶端包)與傳統的Oracle Client 的區別:

instanct client 分為幾個包,其中basic基本只有oci庫文件
 其它常見的包還有sqlplus,jdbc等,都運行於basic包之上。
 而
 Oracle Client不光包括instant client,還包括很多工具。

從10G開始,Oracle提供了一個較為輕量級的客戶包,叫做Instant Client. 將它安裝好后,就不用再安裝龐大的Oracle Client了.
這樣一來,只要客戶端下載Instant Client,直接解壓,設置Path就ok了。
具體設置如下:
1、下載32位Oracle InstantClient
 2、將Oracle InstantClient解壓到某目錄
 3、打開PL/SQL,在perference里面設置OCI Library和Oracle_home,例子如下:
         OCI Library=D:\instantclient_11_2\oci.dll   (剛剛InstantClient的解壓目錄的OCI.DLL文件)
         Oracle_home=D:\instantclient_11_2     (剛剛InstantClient的解壓目錄)
 4、設置環境變量(修改NLS_LANG和TNS_ADMIN環境變量)
  對於NLS_LANG環境變量, 最好設置成和數據庫端一致, 首先從數據庫端查詢字符集信息:
  SQL> select userenv('language') nls_lang from dual;
  NLS_LANG
  ----------------------------------------------------
  AMERICAN_AMERICA.ZHS16GBK
 
 右擊"我的電腦" - "屬性" - "高級" - "環境變量" - "系統環境變量":
  1>.點擊"新建", 變量名設置為"TNS_ADMIN", 變量值設置為"D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN", 點擊"確定";   (64位ORACLE的TNSNAME.ORA文件的目錄)
  2>.點擊"新建", 變量名設置為"NLS_LANG", 變量值設置為"AMERICAN_AMERICA.ZHS16GBK", 點擊"確定";   (數據庫字段集)
  最后點擊"確定"退出.
 
至此,重新登陸PLSQL就可以用了

好。pl/sql 是可以登錄了,但是咱asp.net程序還是連不上啊!到connection.open()的時候,就報:“嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行,將出現此問題。“。這個大概是說我asp.net 程序不應該是用32的客戶端去訪問64位的數據庫,我是這樣理解的。但是我裝了64的oracle 不就相當宇裝了64位的客戶端嗎?裝的那個輕量級的32位客戶端只是方便pl/sql來訪問oralce數據庫的。這個問題網上給出了很多回答。大多是,改項目的屬性里的生成選項里的目標平台:改為x86.意識是把項目當成32位運行。每個項目都照着改了,還是不管用。網上還有說,把網站項目屬性里的web項里的服務器改成iis不使用vs自帶的web deleloper ment 服務,應為它的進程為webDe.webServer.exe 是一個32位的進程,反正說了很多。這個方法還是可以。你改完后,項目確實可以運行,並訪問oracle64位數據庫了。但是我個人總覺得這種方法很麻煩。最后直接用IIS配置運行了,因為vs運行的是32位最好裝個32位客戶端應該就沒問題了。


免責聲明!

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



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