如何告诉System.Data.OracleClient使用64位Oracle驱动程序

chi*_*oro 9 64-bit .net-4.0 windows-7 system.data.oracleclient oracle11gr2

我正在尝试运行System.Data.OracleClient在Win7 x64工作站上使用的.NET应用程序.工作站安装了32位Oracle客户端,导致以下错误消息:

尝试加载Oracle客户端库会引发BadImageFormatException.在安装了32位Oracle客户端组件的64位模式下运行时,将发生此问题.

所以这是我漫长的尝试和失败之旅:

  1. 我尝试安装Oracle客户端win64_11gR2_client.但在设置过程中它崩溃而没有任何评论.
  2. 我按照不同SO线程回答,尝试并解压缩了instantclient-basic-windows.x64-11.2.0.2.0,并将包含二进制文件的文件夹放在windows PATH变量中.我仍然得到相同的错误消息(即使重新启动后).
  3. 我按照这个答案的"替代方式",将文件oci.dll,orannzsbb11.dlloraociei11.dll复制到我的网站项目的bin /文件夹中.仍然是相同的错误消息.
  4. 我尝试将所有文件从即时客户端复制到该目录中并再次尝试,但没有成功.
  5. 我安装了ODAC112021Xcopy_x64.zip并将安装文件夹和bin文件夹放在windows PATH变量中.没有成功.
  6. 我对这个答案抱有希望并回顾了注册表中的DllPath(实际上它应该与ODP.NET相关System.Data.OracleClient),并且看到DllPath指向正确的ODAC的x64安装,所以,如果我的应用程序不是使用System.Data.OracleClient,它应该工作,但由于它确实使用它,它仍然失败.
  7. 我用谷歌搜索和stackoverflew但没有找到任何其他我已经提到的帖子.
  8. 我精心设计了这个SO问题,希望能从开明的SO用户那里得到任何有见地的建议.
  9. 从b_levitt得到第一个答案后,我尝试将以下行添加到Global.asax Application_Start:

    Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64");
    Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin");
    
    Run Code Online (Sandbox Code Playgroud)

    C:\ OracleProducts\Odac-11.2.0.2.1-x64是我安装ODAC 64位xcopy版本的地方.也没有成功.

在相关的说明中,我甚至试图强制我的.NET应用程序进入32位模式但没有成功,但这是另一回事.我需要一个前瞻性的解决方案,这意味着64位.

b_l*_*itt 4

你的 #5 应该可以工作,但你还需要设置 ORACLE_HOME 环境变量。我已经这样做过很多次了,包括最近使用您正在使用的 xcopy 安装。请查看我的 xcopy 安装经验,并让我知道您遇到的其他错误类型。

就我而言,我是为 asp.net 设置它,但 winforms 更容易。您可以打开 cmd 窗口,使用“set”命令设置 PATH 和 ORACLE_HOME 环境变量,然后从同一 cmd 窗口运行您的应用程序。一旦解决了错误,您就可以使用Environment.SetEnvironmentVariable 在代码中设置它们。

根据记录,我确实避免在客户端计算机上安装 oracle 客户端,而是通过 Web 服务处理所有业务逻辑。这样我只需要 Web 服务器上的 oracle 组件。