【问题标题】:The provider is not compatible with the version of Oracle提供程序与 Oracle 版本不兼容
【发布时间】:2013-08-07 06:52:42
【问题描述】:

我在机器上运行 Oracle XE 10g 我创建了一个测试应用程序来测试一些插入,在不同的机器上启动它,一切正常。 问题是当我在安装 oracle XE 的同一台机器上安装大型应用程序时。当我启动应用程序时出现此错误

Oracle.DataAccess.Client.OracleException The provider is not compatible with the version 
of Oracle client  
en Oracle.DataAccess.Client.OracleInit.Initialize()
       en Oracle.DataAccess.Client.OracleConnection..cctor()
       en Oracle.DataAccess.Client.OracleConnection..ctor()
en Test.DB.Oracle.OracleManagerConnection.GetConnection()

在这条线上OracleConnection conn = new OracleConnection()

我不知道它如何在一台机器上工作并且在另一台机器上不起作用。问题出在 Windows Server 2008 x64(已将 Oracle.DataAccess.dll 复制到 .exe 目录)。

【问题讨论】:

  • 他们是否都安装了相同的客户端(版本)?
  • 任何带有完整源代码示例的最终解决方案?
  • 无法让它在那台机器上工作......只是换了另一台并完美工作...... Magic

标签: c# .net oracle oracle10g odp.net


【解决方案1】:

ODP.NET 是真正的 PITA,主要是错误信息太模糊了。

以下可能会触发此错误消息:

  • 您的 Oracle.DataAccess.dll 是 32 位的,它找到并尝试使用的非托管 DLL 是 64 位,反之亦然
  • 根本找不到非托管 DLL
  • 非托管 DLL 的版本与 Oracle.DataAccess.dll 需要的版本确实不同

请注意,Oracle.DataAccess.dll 用于定位非托管 DLL 的过程非常复杂,因为它是一个多步骤过程,需要考虑环境变量、注册表值等。

【讨论】:

  • 所以我需要使用 oracle 通用安装程序并在 windows 服务器上重新安装所有内容?因为我无法启动该安装程序,所以 JRE 崩溃:((在我尝试过的所有机器中)oracle.DataAccess.dll 是 64 位(我确定)但我可以将非托管 DLL 复制到我的 exe 目录? 那它会起作用吗?谢谢
  • @Santanor:最简单的解决方案是使用 Oracle Instant 客户端并将其直接与您的应用程序一起分发。
  • 已经下载了,我应该复制我的应用目录中的所有内容吗?只是基本的?还是另一个? (我第一次遇到这个问题......:()
  • 尝试将存档中的所有文件放入与您的 exe 相同的目录中。确保您下载了正确的版本:如果您的应用程序作为 32 位进程运行,请使用 32 位下载。如果您的进程作为 64 位进程运行,请使用 64 位下载。如果您的应用程序编译为“Any CPU”,则需要 32 位下载 32 位系统和 64 位下载 64 位下载。
  • 同样的例外,一切都编译为 AnyCPU,但我在 x64 位机器上,我已经下载了 x64 即时客户端。我必须在 x64 中运行它
【解决方案2】:

可能还有另一种情况,例如针对 32 位 oracle 客户端运行 64 位 .net 运行时。那么您能否检查托管小型应用程序的机器是否运行 x64 或 32 位。如果它是 32 位的,那么显然复制的提供程序将无法在 X64 Windows 服务器上运行。在这种情况下,您要么需要下载 64 位提供程序版本,要么在大型项目(在 VS 中)上设置目标 CPU 标志以在 32 位运行时运行。

【讨论】:

  • 但是,我可以从一台具有相同 dll(x64 dll)的机器访问 Oracle 服务器
  • @Santanor:这与 Oracle 服务器无关。它是关于用于访问 Oracle 服务器的客户端。
  • 安装了即时客户端,它是 x64 的。但我无法执行 Oracle Universal 安装程序导致 jre 崩溃:(
猜你喜欢
  • 2018-06-04
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2013-06-29
  • 1970-01-01
  • 2014-05-25
  • 2010-11-18
相关资源
最近更新 更多