VS2015 (64 位) 通過 SqlDataSource 連接 Oracle 12c (64 位) 報錯「32 位客戶端以 64 位模式運行」。根因:Visual Studio 進程為 32 位(即使安裝 64 位 VS,設計時進程仍是 32 位),需 32 位 Oracle Client。
解決方案
- 安裝 Oracle 11g 32 位 Client(Instant Client 或完整客戶端),配置
TNS_ADMIN 指向 tnsnames.ora。
- 在 VS「工具 → 選項 → 數據庫工具 → 數據連接」中,Oracle 數據提供程序選 Oracle Client (ODP.NET, Managed Driver) 或 .NET Framework Data Provider for Oracle,確保引用 32 位 DLL。
- 項目屬性 → Build → 取消勾選「Prefer 32-bit」(運行時用 64 位),但設計時仍需 32 位 Client。
為什麼不支援 Oracle 12c+?
- VS 設計時組件(Server Explorer、DataSource 配置向導)基於舊版 ODP.NET,未更新適配 12c+ 的認證協議與數據類型。
- 微軟建議:運行時用 Oracle.ManagedDataAccess.Core (NuGet),設計時降級用 11g Client 僅為元數據獲取。
最佳實踐
- 開發機安裝 Oracle 11g 32 位 Instant Client (70MB) 僅供 VS 設計時使用。
- 項目引用
Oracle.ManagedDataAccess (4.x) 或 Oracle.ManagedDataAccess.Core (3.x+),運行時無需安裝 Client,支援 12c/19c/21c。
- 連接字符串用
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=...))) 免 tnsnames.ora。
一句話總結:設計時 32 位 11g Client,運行時 Managed Core 直連 12c+。