C# 提供程序与Oracle版本不兼容

C# 提供程序与Oracle版本不兼容,c#,.net,oracle,oracle10g,odp.net,C#,.net,Oracle,Oracle10g,Odp.net,我在一台机器上运行Oracle XE 10g我创建了一个测试应用程序来测试一些插件,在不同的机器上启动了它,一切正常。 问题是,我在安装oracle XE的同一台机器上安装了大型应用程序。当我启动应用程序时,我收到此错误 Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client en Oracle.DataAccess.Client.Or

我在一台机器上运行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=neworacleconnection()


我不知道它怎么能在一台机器上工作,又不能在另一台机器上工作。问题出在Windows Server 2008 x64中(alredy将Oracle.DataAccess.dll复制到了.exe目录)。

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

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

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

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

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

两者是否安装了相同的客户端(版本)?是否有完整源代码示例的最终解决方案?无法在该机器上运行。。。简单地换成另一个,效果很好。。。。MagicSo我需要使用oracle universal安装程序并在windows服务器上重新安装所有内容吗?由于我无法启动该安装程序,JRE崩溃:((在我尝试过的所有机器中)oracle.DataAccess.dll是64位的(我确定)但是我可以将非托管DLL复制到我的exe目录吗?这样可以吗?Thanks@Santanor:最简单的解决方案是使用Oracle Instant client并将其直接与应用程序一起分发。Alredy已下载,我是否应复制我的应用程序目录中的所有内容?仅复制基本内容?还是复制另一个内容?(我第一次遇到此问题…:()尝试将存档中的所有文件与exe放在同一目录中。确保下载的版本正确:如果应用程序以32位进程运行,请使用32位下载。如果应用程序以64位进程运行,请使用64位下载。如果应用程序编译为“任意CPU”,您将需要32位系统的32位下载和64位系统的64位下载。同样的例外,所有内容都作为AnyCPU编译,但我在x64位计算机中,并且下载了x64即时客户端。我必须在x64中运行它,但是,我可以从一台具有相同DLL(x64 DLL)的计算机上访问Oracle server@桑塔诺:这不是关于Oracle服务器。这是关于用来访问Oracle服务器的客户端。安装了instant client,它是x64。但是我无法执行Oracle Universal installer,因为jre崩溃:(