Oracle.DataAccess错误

时间:2012-03-12 20:14:27

标签: c# asp.net oracle dll

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

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

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

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

5 个答案:

答案 0 :(得分:14)

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

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

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

通常最好的是拥有两者的最新版本。但是如果你想一劳永逸地摆脱这个问题,那就使用第三方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让它运行。