我有一个在Windows环境中运行的asp.net / C#Web应用程序。 该项目构建良好,并在我的本地机器的VB.net开发服务器上运行完美。
但是,当我发布到真正的应用程序服务器时,我收到以下错误消息:
[OracleException(0x80004005):提供程序与Oracle客户端版本不兼容] [TypeInitializationException:' Oracle.DataAccess.Client.OracleConnection'的类型初始值设定项。抛出异常。]
此应用程序的某个版本目前正常运行,我正在不同目录中的实时服务器上进行测试。我甚至尝试从工作应用程序中抓取Oracle.DataAccess .dll但仍然得到相同的错误消息。
答案 0 :(得分:14)
首先关闭:Oracle客户端/提供商是一团糟。这适用于MS one(无论如何都折旧)以及Oracle one。
为了通过ODP.NET提供程序连接到Oracle DB,需要正确设置三件事:
通常最好的是拥有两者的最新版本。但是如果你想一劳永逸地摆脱这个问题,那就使用第三方oracle .NET提供程序。
更新
其中一个更好的是来自DataDirect(没有隶属关系):
http://www.datadirect.com/products/net/net-for-oracle/index.html
这不仅仅是安装(不需要oracle客户端),而且它也更快,完全托管,x64和一般支持比使用ODP.NET更好。它会花费你。
DevArt一个也很不错(而且便宜得多):
http://www.devart.com/dotconnect/oracle/
出于可扩展性原因,我们决定使用DataDirect,但这与您无关。
在这里,您可以找到构建.NET提供程序的第三方的良好汇编,但不限于oracle:
http://msdn.microsoft.com/en-us/data/dd363565
答案 1 :(得分:1)
我之前遇到了相同的情景
阅读此内容可能会帮助您了解ODAC Oracle for .NET
的方法关于您在服务器中的问题,您必须从oracle安装整个ODAC客户端
现在的最新版本是4.xx
我安装了它,一切都像魅力一样
希望这会有所帮助:)
保重
答案 2 :(得分:1)
我能够通过在prod服务器上搜索Oracle.DataAccess.dll来解决这个问题。 因此,我没有尝试使用Oracle.DataAccess.dll从我的开发环境构建/部署项目,而是将.dll从prod服务器oracle客户端目录复制下来,并将其作为参考包含在内。我还设置.dll属性“Copy Local = true”和“Specific Version”= true。所以看起来我的开发服务器上的oracle客户端版本与prod服务器之间存在不匹配。
答案 3 :(得分:1)
Equals, with Oracle.DataAccess.dll Works!!!!
//using Oracle.DataAccess.Client
object pdf = null;
var queryString =@"SELECT PDF FROM DIGITAL WHERE ID_DIGITAL=1001" ; //example
var ctx = new Entities();
var entityConn = ctx.Connection as EntityConnection;
if (entityConn != null)
{
var dbConn = entityConn.StoreConnection as OracleConnection;
dbConn.Open();
var cmd = new OracleCommand(queryString, dbConn);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
pdf = reader[0];
}
}
dbConn.Close();
}
return pdf;
答案 4 :(得分:0)
除了其他建议之外,只需尝试以管理员身份运行Visual Studio。
我花了很多时间搞乱GAC和各种版本的Oracle.DataAccess.dll,最后只是以管理员身份运行VS让它运行。