嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行,將出現此問題。


本機環境 win10 64位系統,vs2013 32bit 版本,Oracle 安裝在本機包括服務端和客戶端都是 64bit 的

在測試用.net 連接Oracle 數據庫的時候,總是出現以上異常,找尋眾多解決方法,如修改web 項目平台為x86 ,或者使用IIS調試等等,我覺得都不是辦法,最后發現最好的一種解決方案如下:

  下載 instantclient_11_2.zip 文件包,解壓后,可以放在oracle安裝路徑后者其他地方都行

在系統的環境變量path中,將OracleInstantClient的路徑設置在oracle的路徑之前就可以了,這正是安裝版和解壓版的區別所在(系統變量),將 D:\app\instantclient_11_2 放在Path中 Oracle路徑的前面,完美解決

  注意:Path 中設置的 路徑一定要放在oracle 的路徑前面, 記得修改 instantclient_11_2 文件夾E:\app\instantclient_11_2\network\ADMIN\tnsnames.ora 文件里面的配置信息

tnsnames.ora 文件:

 1 # TNSNAMES.ORA Network Configuration File: C:\oracle\ora90\network\admin\tnsnames.ora
 2 # Generated by Oracle configuration tools.
 3 
 4 #sample
 5 
 6 #DATABASENAME =
 7 #  (DESCRIPTION =
 8 #    (ADDRESS_LIST =
 9 #      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
10 #    )
11 #    (CONNECT_DATA =
12 #      (SERVICE_NAME = servicename)
13 #    )
14 #  )
15 
16 orcl=
17   (DESCRIPTION =
18     (ADDRESS_LIST =
19       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT =1521))
20     )
21     (CONNECT_DATA =
22       (SERVICE_NAME =orcl)
23     )
24   )

測試代碼如下:  

 1     public class SqlHelper
 2     {
 3         private static string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ToString();
 4         public static DataTable Query(string sql)
 5         {
 6             DataTable dt = new DataTable();
 7             using (OracleConnection conn = new OracleConnection(connStr))
 8             {
 9                 conn.Open();
10                 OracleCommand cmd = new OracleCommand(sql,conn);
11                 OracleDataAdapter adapter = new OracleDataAdapter(cmd);
12                 adapter.Fill(dt);
13                 return dt;
14             }
15         }
16     }

配置文件 config

 1 <configuration>
 2   <connectionStrings>
 3     <add name="connStr" connectionString="Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
      (HOST = localhost)(PORT =1521)))(CONNECT_DATA =(SERVICE_NAME =orcl)));user=***; password=******;
      persist security info=false;Min Pool Size=10;Max Pool Size=100;Pooling=true;
" />
    <!--<add name="connStr" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
      (HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=***;Password=***;"/>--> 4 </connectionStrings> 5 <system.web> 6 <compilation debug="true" targetFramework="4.5" /> 7 <httpRuntime targetFramework="4.5" /> 8 </system.web> 9 10 </configuration>

 


免責聲明!

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



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