提供程序与Oracle版本不兼容

时间:2013-08-06 10:12:35

标签: 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.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(alredy将Oracle.DataAccess.dll复制到.exe目录中)。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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