[ASP.NET] 嘗試載入 Oracle 用戶端程式庫時傳出 BadImageFormatException。當與具有 32 位元的 Oracle 用戶端...


我在conn.Open()的時候,出現錯誤訊息~~ 嘗試載入 Oracle 用戶端程式庫時傳出 BadImageFormatException。當與具有 32 位元的 Oracle 用戶端元件執行 64 位元模式安裝時,會出現此問題。

上面就是它給的訊息,下面是我的程式。
Imports System.Data.OracleClient

        Dim conn As OracleConnection
        Dim systemType As String
        Dim empDB As New EmployeeDB
        Dim empBean As EmployeeBean
        Dim strUrl As String

        Try
            conn = DBConnection.getConnection
            conn.Open()

來源提到~
32 bit 跟 64 bit 的 client 其實是可以並存的,所以馬上去下載了兩種版本的 Instant Client
再把這兩個資料夾路徑加到 Path 裡面去就好

這邊補充~動作目的及注意路徑
動作目的:希望系統變數裡的path中,能有路徑找的到oci.dll這檔案。
注意路徑:
來源文章32 bit 跟 64 bit路徑是~~
ProgramFiles\Oracle\instantclient_12_1_x64
ProgramFiles\Oracle\instantclient_12_1_x86
但這2個底下「可能」還未指定到oci.dll的上層資料夾!!!(本魯吃了這虧)

本文我32 bit 跟 64 bit的oci.dll放~~
E:\Tools\DB\oracle\OracleClient32_64\instantclient-basic-win32-11.2.0.1.0\instantclient_11_2\
E:\Tools\DB\oracle\OracleClient32_64\instantclient-basic-win-x86-64-11.2.0.1.0\instantclient_11_2\
有沒有覺得太長??加到環境變數的path中就更長了!

我的作法是~~
步一:在環境變數\系統變數下,新增一個變數名稱「oracleclient32_64」,其變數值「E:\Tools\DB\oracle\OracleClient32_64」,按確定。

步二:在環境變數\系統變數下,尋找一個變數名稱「path」且編輯它,
然後~其變數值的最前面加上
「%oracleclient32_64%\instantclient-basic-win32-11.2.0.1.0\instantclient_11_2;%oracleclient32_64%\instantclient-basic-win-x86-64-11.2.0.1.0\instantclient_11_2;」,一直按確定,離開環境變數。

步三:此時壓windows鍵+r,打「cmd」後按enter,在小黑窗中打「path」後按enter,你是看不到在步二增加的東西!
這時候一定需要「重新開機」才會吃到系統變數。(本魯又吃一次虧)

步四:重開機完之後程式跑到conn.Open()時候就順利過了。

Source

嘗試載入 Oracle 用戶端程式庫時傳出 BadImageFormatException。當與具有 32 位元的 Oracle 用戶端元件執行 64 位元模式安裝時,會出現此問題

沒有留言:

技術提供:Blogger.