如何修复“提供程序与Oracle客户端版本不兼容”?

我们使用的是Oracle.DataAccess.dll程序集版本2.102.2.20(32位)。

我将我们的Web API应用程序部署到IIS并尝试打开和关闭连接:

private static void CheckConnectionUsingOracleClient(string connection) { var logger = DiContainer.Resolve(); try { logger.LogInfo("Trying to connect to " + connection); // check whether you can connect to the shop using Oracle.DataAccess using (var cnn = new Oracle.DataAccess.Client.OracleConnection(connection)) { cnn.Open(); cnn.Close(); } logger.LogInfo("Succeeded to connect to " + connection); } catch (System.Exception ex) { logger.LogError("Failed to connect to " + connection, ex); } } 

在我的本地机器上它很好,但在这个服务器上,它在尝试初始化OracleConnection时抛出一个exception:

‘Oracle.DataAccess.Client.OracleConnection’的类型初始值设定项引发了exception。 —> Oracle.DataAccess.Client.OracleException:提供程序与Oracle客户端版本不兼容

我在服务器上安装了Oracle客户端11.2(32位),我可以看到在GAC(c:\ windows \ assembly)中,Oracle.DataAccess程序集安装在32位处理器体系结构中。 它在我们的一台服务器上工作正常但不是这个。

在IIS中,我在应用程序池上设置了“启用32位应用程序”。

怎么修好? 到目前为止,我花了10多个小时尝试不同的东西:(

理想情况下,我希望能够使用Oracle.DataAccess.dll而无需在服务器上安装Oracle客户端。

您可以使用Package Manager Console nuget安装Oracle.ManagedDataAccess

 Pm> Install-Package Oracle.ManagedDataAccess 

ODP.NET,托管驱动程序是100%本机.NET代码驱动程序。 无需安装其他Oracle客户端软件即可连接到Oracle数据库。

更新代码

 using Oracle.ManagedDataAccess.Client; private static void CheckConnectionUsingOracleClient(string connection) { var logger = DiContainer.Resolve(); try { logger.LogInfo("Trying to connect to " + connection); // check whether you can connect to the shop using Oracle.DataAccess using (var cnn = new OracleConnection(connection)) { cnn.Open(); cnn.Close(); } logger.LogInfo("Succeeded to connect to " + connection); } catch (System.Exception ex) { logger.LogError("Failed to connect to " + connection, ex); } } 

Oracle.DataProvider版本2.102.2.20 decripted

2:.Net版本(可以是1为.Net 1 – 1.1,2为2 – 3.5和4为4 – 4.5)

102:Oracle版本:Oracle 10.2

2.20:Oracle数据访问版本

你应该检查一下

  1. .Net版本(不应高于您的.Net编译器)

  2. Oracle客户端版本(不应超过Oracle客户端版本)

  3. Oracle客户端和Oracle.DataProvider都是64位或Oracle.DataProvider是32位,Oracle客户端是32位或支持传统32位模式

安装后确保:

  • 使用Oracle dll位置更新PATH:\ product \ 12.1.0 \ client_1 \ bin和\ product \ 12.1.0 \ client_1
  • 重启服务器。
  • 在IIS中为应用程序池启用32位。