Oracle.DataAccess错误

我有一个在Windows环境中运行的asp.net / C#Web应用程序。 该项目构建良好,并在我的本地机器的VB.net开发服务器上运行完美。

但是,当我发布到真正的应用程序服务器时,我收到以下错误消息:

[OracleException(0x80004005):提供程序与Oracle客户端版本不兼容] [TypeInitializationException:’Oracle.DataAccess.Client.OracleConnection’的类型初始值设定项引发exception。

目前有一个版本的应用程序运行正常,我正在不同目录的实时服务器上进行测试。 我甚至尝试从工作应用程序中抓取Oracle.DataAccess .dll但仍然得到相同的错误消息。

首先:Oracle客户端/提供商是一团糟。 这适用于MS one(无论如何都是折旧的)以及Oracle的。

为了通过ODP.NET提供程序连接到Oracle DB,需要正确设置三件事:

  • 需要正确设置Oracle客户端(与.NET提供程序无关,这指的是通常在c:\ oracle中安装的oracle客户端)
  • ODP.NET提供程序需要与已安装的Oracle客户端兼容
  • 客户端和提供者的体系结构和您的应用程序需要匹配,您不能将64位客户端与x86提供者/应用程序一起使用,反之亦然

通常最好的是拥有两者的最新版本。 但是,如果您想一劳永逸地摆脱这个问题,请使用第三方oracle .NET提供程序。

UPDATE

其中一个更好的是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

我以前遇到过同样的情况

阅读本文可能会帮助您了解ODAC Oracle for .NET的方法

关于您在服务器中的问题,您必须从oracle安装整个ODAC客户端

最新版本现在是4.xx

我安装了它,一切都像魅力一样

希望这可以帮助 :)

照顾自己

我能够通过在prod服务器上搜索Oracle.DataAccess.dll来解决这个问题。 因此,我没有尝试使用Oracle.DataAccess.dll从我的开发环境构建/部署项目,而是将.dll从prod服务器oracle客户端目录复制下来,并将其作为参考包含在内。 我还设置.dll属性“Copy Local = true”和“Specific Version”= true。 所以看起来我的开发服务器上的oracle客户端版本和prod服务器之间存在不匹配。

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; 

除了其他建议之外,只需尝试以管理员身份运行Visual Studio。

我花了很多时间搞乱GAC和各种版本的Oracle.DataAccess.dll,最后只是以管理员身份运行VS让它运行起来。