2012-03-12 65 views
4

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

然而,当我发布到我收到以下错误消息中的实际应用服务器:

[OracleException(0X80004005):提供程序是不与版本Oracle客户端兼容] [TypeInitializationException:的类型初始为'Oracle.DataAccess.Client.OracleConnection'抛出一个例外。]

这个应用程序的一个版本目前已经启动并且运行得很好,我正在测试不同目录中的活动服务器。我甚至尝试从工作应用程序中获取Oracle.DataAccess .dll,但仍然收到相同的错误消息。

+0

我读了一个论坛的地方,我可以指出我的web.config文件,一组Oracle即时客户端的.dll的。我不确定这是否值得。 – Baxter 2012-03-12 20:15:24

+0

此外,我正在寻找oracle.dataaccess版本2.112.2.0,它是安装在活动服务器的GAC上的版本。 – Baxter 2012-03-12 20:18:00

+0

Oracle客户端程序集版本可以在machine.config中设置。你可以检查它。 – 2012-03-12 20:18:01

回答

12

首先:Oracle客户端/提供程序是一团糟。这对于MS(无论如何都是折旧的)和Oracle都是这样。

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

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

通常情况下最好的是拥有两者的最新版本。但是,如果您想一劳永逸地使用第三方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提供者,不限于甲骨文虽然第三方编好:
http://msdn.microsoft.com/en-us/data/dd363565

+0

你能推荐一个好的第三方oracle.net提供商吗? – Baxter 2012-03-12 20:25:25

+1

用2个样本和一般链接更新了我的答案。 – ntziolis 2012-03-13 09:48:39

1

我遇到同样的情况出现之前

阅读这可能会帮助你一些如何ODAC Oracle for .NET

关于你的服务器你的问题,你必须从Oracle

最新版本安装整个ODAC客户端现在是4.xx

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

希望这有助于:)

保重

+0

你不必安装整个东西。如果您只安装必要的文件,您可以将内存占用空间保持在140 MB。 – Alex 2012-03-12 20:23:48

1

我能够通过督促搜索Oracle.DataAccess.dll解决这个服务器。 因此,而不是试图建立/从我的开发环境部署与Oracle.DataAccess.dll项目,我复制.dll文件从督促服务器Oracle客户端目录下来,包括作为一个参考吧。我还设置了“复制本地= true”和“特定版本”= true的.dll属性。因此,看起来我的开发服务器上的oracle客户端版本与prod服务器之间存在不匹配。

1
Equals, with Oracle.DataAccess.dll Works!!!! 
//using Oracle.DataAccess.Client 

object pdf = null; 

var queryString [email protected]"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; 
0

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

我花了很多时间瞎搞与GAC和Oracle.DataAccess.dll的各种版本,并在刚刚结束运行VS以管理员身份得到了它的运行。