System.Data.OdbcHKLM\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI,64 位元 ODBC 管理員 (odbcad32.exe) 看不到。| 方案 | 操作 | 優點 | 缺點 |
|---|---|---|---|
| 強制 x86 編譯 (推薦) | 專案屬性 → Build → 取消「Prefer 32-bit」或勾選「Prefer 32-bit」/ 目標平台 x86 | 零程式碼修改、相容現有 32 位元驅動、最快落地 | 進程限制 4 GB 記憶體、無法享用 64 位元效能 |
| 安裝 64 位元 Oracle Client + ODBC | 下載 64 位元 Instant Client + ODBC 套件,建立 64 位元 System DSN | 原生 64 位元、記憶體無上限 | 需額外授權/下載、雙維護 |
| 使用 ODP.NET Managed Driver | NuGet 安裝 Oracle.ManagedDataAccess,免 Client、純 .NET、跨平台 | 最佳現代方案、無位元數問題、效能優 | 需改寫資料存取層 (OdbcConnection → OracleConnection) |
| COM+ / WCF 代理 | 將 32 位元資料存取封裝為 32 位元 COM+ 應用程式,64 位元主程式跨程序呼叫 | 不改主程式架構 | 複雜度高、序列化開銷、維護難 |
# Visual Studio 專案屬性
右鍵專案 → Properties → Build
☑ Prefer 32-bit (Visual Studio 2012+)
# 或
Platform target: x86
重新建置部署,進程將以 WoW64 模式執行,可正常載入 32 位元 Oracle ODBC 驅動。
C:\Windows\SysWOW64\odbcad32.exeDSN_JIARUIJIARUI2 (對應 tnsnames.ora 別名)guide
JIARUI2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.30.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
string connStr = "DSN=DSN_JIARUI;UID=guide;PWD=guide;";
using (var conn = new OdbcConnection(connStr)) {
conn.Open();
// 後續 OdbcCommand / OdbcDataAdapter 操作
}
# 程式碼中列印
Console.WriteLine("Is64BitProcess: " + Environment.Is64BitProcess); // 應為 False