提供程序与Oracle客户端版本不兼容

问题描述 投票:152回答:26

我正在尝试在我的ASP.net项目上使用Oracle ODP.NET 11g(11.1.0.6.20)Instant Client作为数据提供程序,但是当我运行aspx页面时,我得到一个“提供程序与版本不兼容“Oracle客户端”错误消息。任何帮助,将不胜感激。

我在Visual Studio 2005中引用了数据提供程序,后面的代码如下所示:

using Oracle.DataAccess.Client;
..

OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
    "Data Source=MyOracleServerName;" +
    "Integrated Security=SSPI";
oOracleConn.Open();

//Do Something

oOracleConn.Close();

页面的错误如下所示:

Exception Details: Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

Source Error: 
Line 21: 
Line 22: 
Line 23:             OracleConnection oOracleConn = new OracleConnection();
Line 24:             oOracleConn.ConnectionString =
Line 25:                 "Data Source=MyOracleServerName;" +

[OracleException (0x80004005): The provider is not compatible with the version of Oracle client]
   Oracle.DataAccess.Client.OracleInit.Initialize() +494
   Oracle.DataAccess.Client.OracleConnection..cctor() +483

Stack Trace: 
[TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.]
   Oracle.DataAccess.Client.OracleConnection..ctor() +0
   Boeing.IVX.Web.RoyTesting.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\CE218C\Desktop\IVX.Net\Web\IVX\RoyTesting.aspx.cs:23
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
c# asp.net oracle odp.net oracleclient
26个回答
88
投票

我一直在研究这个问题,你只需要从相同的下载版本的ODP.Net中获取所有相应的DLL,并将它们放在与Exe文件相同的文件夹中,因为ODP.Net对于不混合而言非常挑剔版本号。

我在这里解释了如何做到这一点:http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c以下是它的要点:

  • 下载ODP.Net
  • 解压缩文件
  • 解压缩其中的所有JAR
  • 抓住刚刚解压缩的这些dll: oci.dll(从'oci.dll.dbl'重命名) Oracle.DataAccess.dll oraociicus11.dll OraOps11w.dll orannzsbb11.dll oraocci11.dll ociw32.dll(从'ociw32.dll.dbl'重命名)
  • 将所有DLL放在与C#Executable相同的文件夹中

2
投票

在我看来,虽然你有ODP与Oracle Istant客户端,但ODP可能会尝试使用实际的Oracle客户端。您是否在计算机上安装了标准Oracle客户端?我记得Oracle在同一台机器上遇到多个客户端时非常挑剔。


2
投票

我有同样的问题。我在编译应用程序后删除了(并忘了我已删除)oraociei11.dll。并且它在尝试执行时发出此错误。所以当它无法找到oraociei11.dll的dll时,它会显示此错误。当它出现此错误时可能还有其他情况,但这似乎是其中之一。


2
投票

另外查找IIS应用程序池启用32位真或假标志,当你看到这条消息时,一些oracle论坛指导我这个!


2
投票

这是我为解决这个持续3个小时的问题所做的工作:

  1. 在位于<configuration> <oracle.dataaccess.client> <settings> <add name="DllPath" value="C:\oracle\bin"/> <!-- ... --> </settings> </oracle.dataaccess.client> </configuration> 的Oracle主目录下,我有一个名为C:\oracle\product\11.2.0的文件夹,我之前安装了Windows 64位的client_1位。
  2. 稍后在尝试使用Visual Studio 2012调试我的ASP.NET Web API应用程序时,我不断收到此错误消息:提供程序与Oracle客户端版本不兼容。
  3. 搜索谷歌我发现这发生了,因为我使用的是64位的ODP.NET。然后我抓住了Windows 32位的ODP.NET并安装了它,但我一直收到相同的错误信息。
  4. 解决方案:删除文件夹ODP.NET和resinstalled client_1 32位。安装程序有点混合了64位版本和32位版本的位。去搞清楚...
  5. 现在我又开心了,我可以打开一个新的ODP.NET。最后! :)

2
投票

对于仍然有这个问题的人:基于这篇文章

OracleConnection

我发现我的服务器缺少Microsoft C ++ Visual Runtime Library - 因为安装了Visual Studio,我在dev机器上安装了它。我从这里下载并安装了(当前)最新版本的库:

http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html

跑了设置和来自C#的oracle调用吧!


2
投票

TLDR版本:

  • 请改用12c http://www.microsoft.com/en-us/download/details.aspx?id=13523
  • 如果必须使用旧提供程序,则需要将Oracle.DataAccess.dll指向具有正确版本的非托管Oracle Client Dll。如果您的计算机上安装了多个Oracle客户端,可能很简单,在您的应用程序配置中包含“DllPath”配置变量(见下文),但您可能还需要安装新的oracle客户端以指向。

完整版本:

首先,让我们确保了解旧的未经授权的提供程序(而不是新的12c 100%托管提供程序)的组件。它由两部分组成:

  1. 托管的.net组件 - Oracle.DataAccess.dll
  2. 非托管(非网络)客户端

简单来说,Oracle.DataAccess.dll几乎只是一个包装器,将.net指令转换为非托管客户端的ORACLE-NET指令。

也就是说,当您加载Oracle.DataAccess时,它会尝试查找所需的非托管客户端dll。来自100% managed provider

Oracle.DataAccess.dll根据以下顺序搜索依赖的非托管DLL(例如Oracle Client):

1.应用程序或可执行文件的目录。

2.应用程序配置或web.config指定的DLL路径设置。

3.由machine.config指定的DllPath设置。

4. Windows注册表指定的DLL路径设置。

HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ ODP.NET \版本\ DllPath的

5. Windows PATH环境变量指定的目录。

因此,在您的情况下,您的应用程序遵循上述过程,并找到了一条路径,该路径具有相对于您正在使用的Oracle.DataAccess.dll程序集而言过于陈旧的无法使用的dll。

可能只是该机器上唯一的Oracle客户端安装太旧了。但是,如果您在计算机上安装了多个客户端并且首先在不同但较旧的安装中找到了非管理文件,则会发挥作用。如果是后者,最简单的方法是在配置中使用dllPath配置变量并将其指向正确的Oracle Home Bin文件夹:

Oracle Documentation

如果要安装客户端的新副本,<configuration> <oracle.dataaccess.client> <add key="DllPath" value="c:\oracle\product\1.1.0-xcopy-dep\BIN"/> </oracle.dataaccess.client> </configuration> 是最小的并包含“即时客户端”并将DllPath指向上面的新位置。但任何oracle客户端安装都可以。

但是如果你想避免所有这些非托管客户端解析的东西,看看你是否可以更新你的应用程序以使用100%托管提供程序 - 它实际上只是一个或两个托管程序集,而不依赖于无人文件。

如果它安装在bin目录和GAC中,你也可能没有加载你认为你的Oracle.DataAccess.dll,但我认为这是不太可能的senario。有关更多信息,请参阅xcopy version


1
投票

IIS / IWAM用户是否拥有Oracle目录的权限?您可以使用其他应用程序(例如Excel或Access)连接到此数据源吗?


1
投票

我们遇到了同样的问题,因为我们的DBA更新了网络共享上的Oracle.Data.dll程序集。从项目中删除引用,并再次添加它解决了问题。


1
投票

我有同样的问题,但在我的情况下,我不能只将dll复制到bin文件夹,然后我只“重新绑定”程序集版本。

assembly resolution process

1
投票

只需两步就可以解决这个问题。

  1. 继续设置应用程序池并将“启用32位应用程序”标志设置为True。
  2. 确保Bin中的所有Dll现在都是32位版本...

祝你好运。


45
投票

您应该为启动器“忽略”所有x86 / x64对话,而是尝试使用ODP.NET托管驱动程序(如果您使用的是.Net v4 +):

https://www.nuget.org/packages/Oracle.ManagedDataAccess/

https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/

Oracle ODP.net Managed vs Unmanaged Driver

避免所有“非托管”DLL什么架构问题! :D(约时间Oracle)。

NuGet包(也适用于11g):

enter image description here

旧/手动方法:

有关如何转换为使用托管库的信息:

  • 首先,这是托管与非托管的完美代码比较:http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
  • 确保您仅下载了ODP.NET,托管驱动程序Xcopy版本
  • 从下载的zip文件中,复制并粘贴到项目目录中: Oracle.ManagedDataAccessDTC.dll Oracle.ManagedDataAccess.dll
  • 添加对Oracle.ManagedDataAccess.dll的引用
  • 确保您的exe已发布(添加到VS2010中的应用程序文件夹)与两个dll

1
投票

我没有走上获取新DLL的道路。我们有一堆现有项目完美无缺,只有我的新项目给我带来了麻烦所以我决定尝试其他的东西。

我的项目使用的是内部开发的依赖于Oracle.DataAccess.dll <?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral"/> <bindingRedirect oldVersion="2.112.2.0" newVersion="2.112.1.0"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration> 的Internal.dll。出于某种原因,在发布时,Visual Studio总是上传v4.112.3.0,即使它没有在任何配置文件中明确指定。这就是我收到错误的原因。

所以我做的是:

  1. 将一个成功运行的项目中的Internal.dll复制到我的网站的v4.121.0.0(只是为了安全起见)。
  2. 将Oracle.DataAccess.dll从一个成功运行的项目复制到我的网站的/bin
  3. 从我的网站添加对它们的引用。
  4. 最后Oracle.DataAccess参考出现在/bin,但它显示错误的版本:myWebSite.csproj而不是v4.121.0.0
  5. 我手动更改了v4.112.3.0中的引用,现在读取: myWebSite.csproj

1
投票

我在安装适用于Visual Studio 2015的Oracle数据工具之后遇到了这个问题,然后与甲骨文进行了一段时间的斗争。我决定再次尝试重新安装Oracle客户端而不是文件复制,配置更改等等,这对我有用。


0
投票

最近,我不得不处理一个较旧的项目,其中解决方案和所有包含的项目都针对x32平台。我一直试图在所有地方复制Oracle.DataAccess.dll和所有其他建议的Oracle文件,但每次都碰壁。最后,头部的灯泡点亮(8小时后:)),并要求检查已安装的ODAC组件及其平台。我已经安装了所有64位(x64)ODAC客户端,但没有安装32位(x32)。安装了32位ODAC,问题就消失了。

如何检查已安装的ODAC的版本:查看文件夹C:\ Windows \ assembly。 “处理器体系结构”属性将通知平台已安装的ODAC。

灯泡点亮需要8个小时。难怪我总是不得不工作:)。


0
投票

克里斯的解决方案也适用于我。但是,我收到了一条跟踪错误消息,指出:

<Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>bin\Oracle.DataAccess.dll</HintPath>
</Reference> 

显然,在Oraclish的外语中,这意味着您的程序要么针对所有平台,要么针对32位计算机。只需将Project Properties中的目标平台更改为64位,并希望获得最佳效果。


0
投票

我在Oracle.DataAccess.dll v4.121.2.0上遇到了同样的问题。与2-家庭安装(32和64位版本)。 32位版本的worker,64位版本没有。

在我的情况下(经过2天的尝试)我发现问题是64位家庭版本的权限。该版本中的许多目录都专门覆盖了权限,其中“Authenticated Users”角色没有“读取”访问权限,默认情况下在父目录中设置。那些子目录包括“bin”,“network / admin”,“nls”,“oracore”,“RDBMS”以及可能的其他目录。我通过从sysinternals过滤掉“进程监视器”(Procmon.exe)实用程序中的“访问已拒绝”结果来找到它们。一旦权限从父目录继承到那些子子目录,一切都开始起作用。

我没有覆盖整个oracle home上的权限,所以我一次只做了一个目录,但我想如果你不担心安全性那么多你可以在整个相应的oracle主目录上重置它。


-1
投票
  • 在64位计算机上,将“msvcr71.dll”从C:\ Windows \ SysWOW64复制到应用程序的bin目录。
  • 在32位计算机上,将“msvcr71.dll”从C:\ Windows \ System32复制到应用程序的bin目录。

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.


-3
投票

这里有很多理论答案,但是这里有一个代码的工作示例,您可以立即复制和粘贴并测试:

  1. 我安装了Oracle Express数据库OracleXE112,它已经预装了一些演示表。
  2. 启动安装程序时,系统会要求您输入密码。我输入“xxx”作为密码。 (未用于生产)
  3. 我的服务器在机器192.168.1.158上运行
  4. 在服务器上,您必须明确允许访问Windows防火墙中的进程TNSLSNR.exe。此进程侦听端口1521.如果从下面的代码中收到超时错误,请检查防火墙。
  5. 选项A:对于C#(。NET2或.NET4),您可以下载ODAC11,您必须从中添加Oracle.DataAccess.dll到您的项目。此外,此DLL依赖于:OraOps11w.dll,oci.dll,oraociei11.dll(130MB!),msvcr80.dll。这些DLL必须与EXE位于同一目录中,或者必须在以下位置指定DLL路径:http://randomdevtips.blogspot.com/2012/06/provider-is-not-compatible-with-version.html。在64位机器上另外写入HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
  6. 选项B:如果您已下载ODAC12,则需要Oracle.DataAccess.dll,OraOps12w.dll,oci.dll,oraociei12.dll(160MB!),oraons.dll,msvcr100.dll。注册表路径是HKLM\SOFTWARE\Wow6432Node\Oracle\...
  7. 选项C:如果你不想要超过100 MB的巨大DLL,你应该下载ODP.NET_Managed12.xxxxxxxx.zip,你可以在其中找到HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath,它只有4 MB,是一个纯粹的托管DLL,工作在32位和64位位进程也依赖于没有其他DLL,也不需要任何注册表项。
  8. 以下C#代码适用于我,无需在服务器端进行任何配置(只是默认安装):
using Oracle.DataAccess.Client;
or
using Oracle.ManagedDataAccess.Client;

....

string oradb = "Data Source=(DESCRIPTION="
    + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.158)(PORT=1521)))"
    + "(CONNECT_DATA=(SERVER=DEDICATED)));"
    + "User Id=SYSTEM;Password=xxx;";

using (OracleConnection conn = new OracleConnection(oradb)) 
{
    conn.Open();
    using (OracleCommand cmd = new OracleCommand())
    {
        cmd.Connection  = conn;
        cmd.CommandText = "select TABLESPACE_NAME from DBA_DATA_FILES";

        using (OracleDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                listBox.Items.Add(dr["TABLESPACE_NAME"]);
            }
        }
    }
}

34
投票

我只安装了用于.NET 2.0的Oracle数据提供程序(11.1.0.6.20),但我没有安装Oracle Instant Client(11.1.0.6.0)。

我刚安装它,错误消失了!


32
投票

这可能是由针对32位Oracle客户端运行64位.NET运行时引起的。如果您的服务器在64位上运行应用程序,则会发生这种情况。它将运行64位运行时的.NET应用程序。您可以在VS中的项目上设置CPU标志,以便在32位运行时中运行。


20
投票

让我们做一些总结:

错误消息“提供程序与Oracle客户端版本不兼容”可能由多种原因引起。

  • 您没有安装Oracle客户端。在这种情况下,错误消息确实具有误导性。 Oracle Data Provider for .NET(ODP.NET,即文件Oracle.DataAccess.dll)不包含在Oracle Instant Client中,必须单独安装(从32-bit Oracle Data Access Components (ODAC) 64-bit Oracle Data Access Components (ODAC) Downloads下载),或者您必须在Oracle Universal Installer(OUI)中选择相应选项。 请注意,在安装Oracle Data Provider> = 12.1时,提供程序不会自动注册到GAC中。如果需要,您必须手动注册,请参阅Oracle Doc 2272241.1
  • ODP.NET的版本与安装的Oracle客户端版本不匹配。你必须检查次要版本号!例如,Oracle.DataAccess.dll版本4.112.3.0与Oracle Client 11.2.0.4不兼容。仔细检查ODP.NET和Oracle Client的版本。您可以在sigcheck和/或oraociei*.dll上使用OraOps*w.dll来获取Oracle Client的版本。 注意不同的编号方案。文件版本4.112.3.0表示:.NET Framework版本4,Oracle版本11.2.0.3.x. 有ODP.NET版本“1.x”,“2.x”和“4.x”。这些数字与Microsoft .NET Framework版本1.0.3705 / 1.1.4322,2.0.50727和4.0.30319相关。版本“1.x”在Oracle Client 11.1之前可用。 Oracle Client 11.2引入了版本“4.x”
  • ODP.NET的体系结构(32位或64位)与您的应用程序体系结构不匹配。 32位应用程序仅适用于32位Oracle Client / ODP.NET,64位应用程序需要64位Oracle Client / ODP.NET。 (除非您使用ODP.NET托管驱动程序)
  • .NET Framework版本不匹配。例如,如果使用Target .NET Framework 2.0编译应用程序,则无法使用ODP.NET版本4.x. .NET Framework目标版本必须等于或高于ODP.NET的版本。
  • 开发计算机上的Oracle.DataAccess.dll版本(即编译时加载的版本)高于目标计算机上的版本。
  • 请注意,可能会从Oracle.DataAccess.dll加载GAC,默认情况下,64-bit Oracle Data Access Components (ODAC) Downloads优先于任何本地提供的文件。

解决方案

  • 考虑使用ODP.NET托管驱动程序,可以从Oracle页面下载:Oracle.ManagedDataAccess.dll。在那里你只需要将*.csproj文件复制到你的应用程序目录,不需要其他任何东西。它适用于32位和64位。
  • 在你的*.vbproj,resp。 <Reference Include="Oracle.DataAccess"> <SpecificVersion>False</SpecificVersion> <Private>False</Private> </Reference> 编辑您对ODP.NET的引用,如下所示: Version=... 不需要像processorArchitecture=...Oracle.DataAccess.dll这样的属性。 您的应用程序将根据所选的体系结构和目标.NET框架加载正确的Oracle.DataAccess.dll(前提是它已正确安装) - >未经100%验证
  • 如果您不知道目标计算机上的Oracle客户端版本(例如,它可能是您客户的计算机):转到上面提到的下载页面并下载最少的XCopy版本的Oracle数据访问组件。解压缩zip并将How to uninstall / completely remove Oracle 11g (client)?文件复制到本地计算机。在你的VS项目中引用这个(很可能是过时的)DLL。此DLL的版本是您的应用程序将使用的最低版本的ODP.NET。运行应用程序时,GAC中的发布者策略将重定向到实际安装的版本。
  • 我不认为采用单个DLL并将它们复制到某些文件夹是一种聪明的方法。它可以在“裸机”上运行,但如果您的目标机器安装了任何Oracle产品,则版本不匹配的风险很高。从您的计算机上卸载所有Oracle产品并进行全新安装。看看OraClient11g_home1它是为了得到一台非常干净的机器。
  • 如果您必须同时使用32位和64位应用程序,请按照此说明在一台计算机上安装两个版本:

假设:Oracle Home称为C:\Oracle\11.2\Client_x86,客户端版本为11gR2。

  • (可选)删除已安装的任
  • 例如,下载并安装Oracle x86客户端到C:\Oracle\11.2\Client_x64
  • 将Oracle x64 Client下载并安装到不同的文件夹中,例如C:\Windows\System32
  • 打开命令行工具,转到文件夹%WINDIR%\ System32,通常是ora112并创建一个符号链接C:\Oracle\11.2\Client_x64到文件夹C:\Windows\SysWOW64(见下文)
  • 更改到文件夹%WINDIR%\ SysWOW64,通常是ora112并创建一个符号链接C:\Oracle\11.2\Client_x86到文件夹PATH,(见下文)
  • 修改C:\Oracle\11.2\Client_x86环境变量,用C:\Oracle\11.2\Client_x64替换所有条目,如C:\Windows\System32\ora112\bin,各自的C:\Windows\SysWOW64\ora112子文件夹。注意:ORACLE_HOME不得处于PATH环境中。
  • 如果需要,将你的qazxsw poi环境变量设置为qazxsw poi
  • 打开注册表编辑器。将注册表值C:\Windows\System32\ora112设置为HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME
  • 将注册表值C:\Windows\System32\ora112设置为HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME(不是C:\Windows\System32\ora112
  • 你完成了!现在,您可以将x86和x64 Oracle客户端无缝连接在一起,即x86应用程序将加载x86库,x64应用程序将加载x64库,而无需对系统进行任何进一步修改。

用于创建符号链接的命令:

C:\Windows\SysWOW64\ora112

一些说明:

  • 两个符号链接必须具有相同的名称,例如cd C:\Windows\System32 mklink /d ora112 C:\Oracle\11.2\Client_x64 cd C:\Windows\SysWOW64 mklink /d ora112 C:\Oracle\11.2\Client_x86
  • 如果您想在以后手动安装ODP.NET,请注意选择适当的文件夹进行安装。
  • 尽管名称文件夹ora112包含x64库,而C:\Windows\System32包含x86(32位)库。不要混淆。
  • 也许明智的选择是将C:\Windows\SysWOW64环境变量(在Registry中分配TNS_ADMIN条目)设置为公共位置,例如TNS_ADMIN

5
投票

在目标机器上安装ODP.Net,它应该解决问题...复制dll看起来不是一个好主意......


5
投票

对于Oracle 11g(11.1.0.7.20),我必须添加以下dll以及我的Exe才能工作。

  1. OCI.DLL
  2. OraOps11w.dll
  3. oraociicus11.dll(非常接近30mb)
  4. Oracle.DataAccess.dll

4
投票

在浪费了三个小时后,我的问题就是:

缺少OraOps11w.dll

为什么要生成“提供程序与Oracle客户端版本不兼容”错误消息?它必须是Oracle糟糕的编码/测试。我从1994年开始使用Oracle,自2002年以来多次使用.Net。它几乎总是很痛苦。

每个人都应该卸载Oracle并遵循上面的Chris解决方案(最佳答案)。这应该每次都有效

在StackOverflow上的另一篇文章中,这是如何卸载Oracle(忘记Oracle卸载工具,因为它无法正常工作):

  • 使用Oracle Universal Installer(OUI)卸载所有Oracle组件。
  • 运行regedit.exe并删除HKEY_LOCAL_MACHINE / SOFTWARE / ORACLE项。它包含所有Oracle产品的注册表项。
  • 删除在注册表的以下部分中留下的对Oracle服务的任何引用:HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services / Ora *应该很明显哪些与Oracle有关。
  • 重新启动计算机。
  • 删除“C:\ Oracle”目录,或者ORACLE_BASE的任何目录。
  • 删除“C:\ Program Files \ Oracle”目录。
  • 清空“c:\ temp”目录的内容。
  • 清空回收站。

Chris比我在Server 2003(32位)上的dll少。这就是我所拥有的:

TNS_ADMIN=C:\Oracle\Common\network

C:\ oracle \ instantclient是在全局路径和ORACLE_HOME环境变量中。 .Net代码引用C:\ oracle \ instantclient \ Oracle.DataAccess.dll


4
投票

经过几个小时的故障排除后,我发现这个问题是由于我的项目bin目录中有Oracle.DataAccess.dll(v4.0)引起的,但是运行时也从GAC加载了Oracle.DataAccess.dll(v2.x)。删除和读取项目引用中的Oracle.DataAccess条目为我解决了这个问题。

在我的情况下,这里提到的其他文件似乎没有必要。

UPDATE

“提供程序与Oracle客户端版本不兼容”错误的根本原因(通常)托管程序集正在尝试加载与版本不匹配的非托管库。看来你可以通过在web.configC:\oracle\instantclient>dir /b oci.dll ociw32.dll Oracle.DataAccess.dll orannzsbb11.dll oraocci11.dll oraociei11.dll OraOps11w.dll Orasqlplusic11.dll sqlplus.exe tnsnames.ora 中指定库路径来强制Oracle驱动程序使用正确的库。

1
© www.soinside.com 2019 - 2024. All rights reserved.