我们使用的是Oracle.DataAccess.dll程序集版本2.102.2.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'的类型初始值设定项 抛出一个例外。 ---&GT; Oracle.DataAccess.Client.OracleException:The provider与Oracle客户端版本不兼容
我在服务器上安装了Oracle客户端11.2(32位),我可以看到在GAC(c:\ windows \ assembly)中,Oracle.DataAccess程序集安装在32位处理器体系结构中。它在我们的一台服务器上工作正常但不是这一台。
在IIS中,我还在应用程序池上设置了“启用32位应用程序”。
如何修复?到目前为止,我花了10多个小时尝试不同的事情:(
我非常希望能够使用Oracle.DataAccess.dll而无需在服务器上安装Oracle客户端。
答案 0 :(得分:4)
您可以安装Oracle.ManagedDataAccess 使用程序包管理器控制台nuget
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<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);
}
}
答案 1 :(得分:3)
Oracle.DataProvider版本2.102.2.20 decripted
2:.Net版本(对于.Net 1可以是1 - 1.1,对于2 - 3.5可以是2,对于4可以是4 - 4.5)
102:Oracle版本:Oracle 10.2
2.20:Oracle数据访问版
你应该检查
.Net版本(不应高于您的.Net编译器)
Oracle客户端版本(不应超过Oracle客户端版本)
Oracle客户端和Oracle.DataProvider都是64位或Oracle.DataProvider是32位,Oracle客户端是32位或支持传统的32位模式
答案 2 :(得分:0)
安装后请确保: