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



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

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

 private static void CheckConnectionUsingOracleClient(string connection)
        {
            var logger = DiContainer.Resolve<ILogger>();
            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:时,它会抛出一个异常

"Oracle.DataAccess.Client.OracleConnection"的类型初始值设定项引发异常。--->Oracle.DataAccess.Client.OracleException:提供程序与Oracle客户端的版本不兼容

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

在IIS中,我还在应用程序池中设置了"启用32位应用程序"。

如何修复?到目前为止,我已经花了10多个小时尝试不同的东西:(

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

您可以安装Oracle.ManagedDataAccess使用Package Manager控制台nuget

Pm> Install-Package Oracle.ManagedDataAccess

托管驱动程序是一个100%的原生.NET代码驱动程序。无需安装其他Oracle客户端软件即可连接到Oracle数据库。

更新代码

using Oracle.ManagedDataAccess.Client;
private static void CheckConnectionUsingOracleClient(string connection)
        {
            var logger = DiContainer.Resolve<ILogger>();
            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解密

2:.Net版本(对于.Net 1-1.1可以是1,对于2-3.5可以是2,对于4可以是4-4.5)

102:Oracle版本:Oracle10.2

2.20:Oracle数据访问版本

你应该检查

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

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

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

安装后,请确保:

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

最新更新