2009-07-21 136 views
8

我可能在这里问错了问题,如果愿意,我愿意改变它。Oracle 11g客户端需要ODP.NET吗?

我有一个使用Microsoft.NET Oracle提供(我们的计划是改变ODP,但我们没有这样做还)的项目。

我想让这个项目建立在Windows 2008(x64)构建服务器上。它的构建很好,但是当我们的单元测试碰到Oracle数据库时,就会失败。

我最初安装了32位的Oracle 9i的客户端,它是我们在我们的winxp开发框和以前的2003构建服务器目前使用的。但是现在得到如下消息:试图加载Oracle客户端库引发BadImageFormatException。在安装了32位Oracle客户端组件的64位模式下运行时,会发生此问题。

我们尝试编译到x86平台,但没有更改错误消息。

我现在已经安装了11g的64位客户端,但我得到一个消息,说System.Data.OracleClient的需要Oracle客户端软件版本8.1.7或更高。

那么我应该使用哪些Oracle安装?

编辑:

我能得到这个工作。原来,这是导致问题的测试,迫使NUnit以32位模式运行:http://geekswithblogs.net/Lance/archive/2006/12/28/102191.aspx我能够使用旧的32位驱动程序使测试工作。这将是一个蹩脚的答案,所以我没有使用它,但很高兴将正确答案提供给任何人在过渡到Oracle 64位驱动程序时提供一些很好的信息。

回答

9

当涉及到甲骨文,我喜欢用Oracle Instant Client

  • 您不必在目标机器上安装任何东西(包括开发盒!)。
  • 您可以确保您的应用程序将与您选择的特定客户端一起运行。
  • 您甚至可以在同一台计算机上轻松地使用不同客户端版本的多个应用程序。
  • 作为一个缺点,它增加了一个重要的权重(至少约19Mb)你的应用程序。

检查What is the minimum client footprint required to connect C# to an Oracle database?了解更多信息。要了解如何设置可在x86和x64机器上工作的Visual Studio项目,请查看我的博客帖子Oracle Instant Client in Visual Studio

0

我发现很多次,错误“需要Oracle客户端软件版本8.1.7或更高版本”是一个众所周知的误导性错误。从遥远的记忆我似乎记得,这通常表明文件IO权限问题。我想这可能是ASP.NET工作进程(或任何标识的应用程序在其下运行),需要某种形式的读或写权限的Oracle客户端文件夹层次结构的文件夹中...

1

我觉得消息“System.Data.OracleClient的需要Oracle客户端软件版本8.1.7或更高”它类似于“没有安装,安装,但是未找到或安装,但它需要8.1.7或更高版本的Oracle客户端”。

检查注册表编辑器,如果该值是正确的项下:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraOdac11g_home1 

OraOdac11g_home1取决于Oracle主名称为您安装。

此外,尝试通过Visual Studio连接,看看它是否可能。

0

这可能是环境中多个oracle家庭的原因。在构建系统中删除旧版本的Oracle主目录。尝试再次与单一家庭生成的构建。有一些问题与9i的版本ODP.NET和10G/11G连接

1

我有可能涉及到你所看到的问题。

我最初有我的机器和.Net Oracle.DataAccess组件版本号为10.2.0.100上安装的只是Oracle 10g客户端 - 这是在.NET运行时1.0.3705

我安装ODP.Net并且Oracle.DataAccess组件版本现在是v2.102.2.20,并且运行在.Net运行时v2.0.50727上 - 我无法找到有关Oracle为什么这么做的参考 - 这与将版本号与运行时一致版本

我花了一天的时间来解决这个问题。我们不使用11g客户端,我也没有使用8i客户端,因此我不知道这些客户端的版本号是什么,但是如果我是你,我会检查它。

总之,甲骨文反跟踪它可以使你的11克组件的组件版本号显现出过期,而不是甲骨文8i的组件

3

自从今年秋季(2012年)开始,我添加了一个新答案,即ODP托管代码测试版可用。有关更多信息,请参阅this link。这对我们来说是非常稳定的,我们用它在生产,主要是因为这些原因:

  • 没有安装(除实体框架,需要简单注册)
  • 它比非托管版本更小,占地面积约为6 MB。
  • 不是“有点敏感”,即任何CPU将最终与ODP :)
  • 更直观地映射C#工种< - > Oracle类型(以及它解决了从数据库中的一些问题,EF和模型生成)
  • 支持EZCONNECT(所有版本的非托管ODP没有),即没有更多的tnsnames.ora麻烦。

但对于过渡到64位,下载管理ODP驱动程序并更改Oracle.DataAccess参考Oracle.ManagedDataAccess并重新编译:)

相关问题