0

我在机器上运行 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 目录)。

4

2 回答 2

1

ODP.NET 是一个真正的 PITA,主要是因为错误信息非常模糊。

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

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

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

于 2013-08-06T10:23:31.363 回答
0

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

于 2013-08-06T10:26:25.550 回答