首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

ODP.NET 部署全攻略:32/64位、免安裝客戶端、連接池與常見錯誤

     編輯:Oracle 教學

ODP.NET 部署全攻略:32/64位、免安裝客戶端、連接池與常見錯誤

C# 專案操作 Oracle 資料庫常用 ODP.NET,但部署時因作業系統位元數、是否安裝 Oracle Client、版本相容性等問題頻發。本文總結實務中驗證可行的部署策略:連接字串標準、32/64 位元配置、免安裝客戶端 (XCopy) 部署、組件綁定重導向、VC++ 執行階段相依。

1. 標準連接字串

<connectionStrings>
  <add name="OracleDB" 
       connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DB_IP)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SVC_NAME)));User Id=usr;Password=pwd;Min Pool Size=10;Connection Lifetime=120;Connection Timeout=60;Incr Pool Size=5;Decr Pool Size=2" 
       providerName="Oracle.DataAccess.Client" />
</connectionStrings>

2. 32 位系統部署

  1. 安裝 ODTwithODAC1120320_32bit (含 ODP.NET、Oracle Client)
  2. 直接參考 Oracle.DataAccess.dll,無額外配置
  3. 若需免安裝,參考第 4 節

3. 64 位系統部署

關鍵:web.config/app.config 加入組件綁定重導向,解決版本衝突:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.121.1.0" newVersion="4.121.1.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

注意: 64 位系統必須使用 64 位版 Oracle.DataAccess.dll 及對應 Oracle Client。

4. 免安裝 Oracle Client (XCopy 部署)

將以下 5 個核心檔案置於應用程式根目錄 (bin 資料夾):

  1. oci.dll
  2. Oracle.DataAccess.dll
  3. orannzsbb11.dll
  4. oraociei11.dll
  5. OraOps11w.dll

config 檔註冊 DbProviderFactory:

<system.data>
  <DbProviderFactories>
    <add name="Oracle Data Provider for .NET" 
         invariant="Oracle.DataAccess.Client" 
         description="Oracle Data Provider for .NET" 
         type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </DbProviderFactories>
</system.data>

5. 連接池使用

OracleConnection myConn = new OracleConnection(connStr);
myConn.Open();  // 自動建立/使用連接池

連接字串參數控制池行為:Min Pool Size、Max Pool Size、Connection Lifetime、Incr/Decr Pool Size。

6. 常見部署錯誤與解決

錯誤現象原因與解決
底層異常無法捕捉、啟動失敗 缺少 VC++ 執行階段。安裝 vc2008redist 或 vc2010redist (x86/x64 對應)
ORA-12154 / TNS 無法解析 連接字串使用 SID 但服務端為 SERVICE_NAME。改用 SERVICE_NAME=xxx 或 Data Source=TNS_ALIAS
BadImageFormatException 32/64 位不匹配。專案目標平台 (x86/x64/AnyCPU) 必須與 ODP.NET DLL 位元數一致
DLL 找不到 / 版本衝突 免安裝部署缺少 5 核心檔;或 GAC 中殘留舊版。清理 GAC、確認 bin 目錄檔案完整

7. 小結

  • 優先使用安裝版 Oracle Client,穩定性最佳
  • 免安裝部署僅適用簡單場景,64 位驗證較少,謹慎使用
  • 專案屬性 目標平台明確指定 x64 或 x86,避免 AnyCPU 導致運行時位元數不確定
  • 保持 ODP.NET 版本與 Oracle Client 版本一致
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved