首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 連接 Oracle 11g 報錯:32 位客戶端與 64 位環境不匹配

     編輯:程式設計綜合問答

錯誤現象

VS2015 C# 專案連接本地 Oracle 11g,拋出異常(截圖顯示「嘗試加載格式不正確的程序」或「BadImageFormatException」)。

根因

架構不匹配:

  • Oracle Client 安裝的是 32 位 版本。
  • 應用程序池/IIS Express/進程運行在 64 位 模式。
  • 64 位進程無法加載 32 位非託管 DLL (oci.dll 等)。

解決方案

方案一:安裝 64 位 ODAC(推薦)

  1. 下載 ODTwithODAC122010 或更新版(含 64 位 Oracle Data Provider for .NET)。
  2. 安裝時選擇 Oracle Data Provider for .NET (ODP.NET) 4.x 並勾選 64 位。
  3. 專案引用 Oracle.ManagedDataAccess.dll(托管驅動,無需本地 Client,最簡單)。

方案二:強制應用運行在 32 位模式(臨時)

  • 專案屬性 → Build → 取消勾選 Prefer 32-bit(反過來:若想 32 位則勾選)。
  • IIS 應用程序池 → Advanced Settings → Enable 32-Bit Applications = True。

方案三:使用托管驅動 Oracle.ManagedDataAccess(最佳實踐)

  1. NuGet 安裝:Install-Package Oracle.ManagedDataAccess。
  2. 配置 app.config / web.config:
<configSections>
  <section name="oracle.manageddataaccess.client" 
           type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess" />
</configSections>
<oracle.manageddataaccess.client>
  <version number="*">
    <dataSources>
      <dataSource alias="MyDB" 
        descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))" />
    </dataSources>
  </version>
</oracle.manageddataaccess.client>
<connectionStrings>
  <add name="OracleConn" connectionString="User Id=bbyyj;Password=bbyyj;Data Source=MyDB" />
</connectionStrings>

代碼中:

using Oracle.ManagedDataAccess.Client;
var conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString);
conn.Open(); // 無需本地 Oracle Client 安裝

驗證步驟

  1. 命令行 tnsping ORCL 測試網絡連通。
  2. 確認防火牆開放 1521 端口。
  3. 檢查 tnsnames.ora 服務名配置正確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved