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

时间:2011-07-22 14:04:28

标签: windows-7 .net-4.0 64-bit oracle11gr2 system.data.oracleclient

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

  

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

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

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

    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");
    

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

  10. 在相关的说明中,我甚至尝试force my .NET app into 32bit mode without success,但这是另一回事。我需要一个前瞻性的解决方案,这意味着64位。

2 个答案:

答案 0 :(得分:4)

你的#5应该有效,但你还需要设置ORACLE_HOME环境变量。我已经做了很多次,包括最近使用的xcopy安装。请查看my experience with the xcopy install,告诉我您会收到哪些其他错误。

在我的情况下,我是为asp.net设置的,但winforms更容易。您可以打开cmd窗口,使用“set”命令设置PATH和ORACLE_HOME环境变量,然后从同一个cmd窗口运行您的应用程序。一旦得到错误,就可以使用Environment.SetEnvironmentVariable在代码中设置这些错误。

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

答案 1 :(得分:1)

我遇到了同样的问题。我通过Oracle论坛和stackoverflow找到了我的大部分答案。我不能发布链接供参考,但我可以给你一些尝试。

  1. 还在bin目录中包含OraOps11w.dll以及其他Oracle dll文件。
  2. 转到项目属性|参考路径,将C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727或C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319添加到参考路径,具体取决于哪个框架该项目正在使用的版本。
  3. **我记不太清楚的模糊部分:删除System.Data.OracleClient当前引用并从C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727或C:\ Windows \添加新引用Microsoft.NET \ Framework64 \ v4.0.30319到引用路径,具体取决于项目使用的框架版本。
  4. 查看异常是否消失。

    仅供参考,微软将在不久的将来放弃Oracle数据提供商(在ADO.NET中)的支持。它目前可以通过.NET 4运行,但最好开始测试本机Oracle驱动程序。