Oracle 11g客户端是否需要ODP.NET?

时间:2009-07-21 16:17:15

标签: oracle 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位驱动程序提供一些好信息的人提供正确的答案。

6 个答案:

答案 0 :(得分:9)

谈到Oracle,我喜欢使用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

答案 1 :(得分:3)

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

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

但是要转换到64位,请下载托管ODP驱动程序并将Oracle.DataAccess引用更改为Oracle.ManagedDataAccess并重新编译:)

答案 2 :(得分:1)

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

如果值正好在密钥下,请检查regedit:

 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraOdac11g_home1

OraOdac11g_home1取决于您安装的Oracle Home名称。

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

答案 3 :(得分:1)

我遇到的问题可能与您所看到的有关。

我最初只在我的机器上安装了Oracle 10g客户端,而.Net Oracle.DataAccess组件版本号为10.2.0.100 - 这是针对.Net运行时v1.0.3705

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

我花了一天时间才解决这个问题。我们还没有使用11g客户端而且我没有使用8i客户端多年,所以我不知道那些客户的版本号是什么,但是如果我是你那么我会检查它。

简而言之,Oracle反向跟踪组件版本号,这可能会使您的11g组件显得过时而不是Oracle 8i组件

答案 4 :(得分:0)

我多次发现错误“需要Oracle客户端软件版本8.1.7或更高版本”是一个众所周知的误导性错误。从远处的内存我似乎记得,这通常表明文件IO权限问题。我认为ASP.NET工作进程(或运行应用程序的任何身份)可能需要对oracle客户端文件夹层次结构中的文件夹具有某种读取或写入权限...

答案 5 :(得分:0)

这可能是环境中多个甲骨文家园的原因。在构建系统中删除旧版本oracle home。尝试使用单个主页再次生成构建。 9i版本的ODP.NET和10G / 11G连接存在一些问题