我可能会在这里提出错误的问题,如果是的话,我愿意改变它。
我有一个使用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位驱动程序提供一些好信息的人提供正确的答案。
答案 0 :(得分:9)
谈到Oracle,我喜欢使用Oracle Instant Client:
检查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。它对我们来说非常稳定,我们正在生产中使用它,主要是因为这些原因:
但是要转换到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连接存在一些问题