提供程序与Oracle版本不兼容

本文关键字:版本 不兼容 Oracle 程序 | 更新日期: 2023-09-27 18:26:38

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

提供程序与Oracle版本不兼容

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位运行时运行。