8

我可能在这里问了错误的问题,如果是这样,我愿意改变它。

我有一个使用 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 位驱动程序的好信息的人。

4

6 回答 6

9

谈到 Oracle,我喜欢使用Oracle Instant Client

  • 您不必在目标机器上安装任何东西(包括开发盒!)。
  • 您可以确保您的应用程序将使用您选择的特定客户端运行。
  • 您甚至可以轻松地让多个应用程序在同一台计算机上使用不同的客户端版本。
  • 不利的一面是,它会显着增加您的应用程序的重量(最低约 19Mb)。

检查将 C# 连接到 Oracle 数据库所需的最小客户端占用空间是多少?了解更多信息。要了解如何设置适用于 x86 和 x64 机器的 Visual Studio 项目,请查看我的博文Oracle Instant Client in Visual Studio

于 2009-08-27T13:54:05.837 回答
3

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

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

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

于 2012-12-21T09:22:57.937 回答
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 连接,看看是否可行。

于 2009-07-21T21:46:35.310 回答
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 组件显得过时的组件版本号

于 2009-08-19T14:46:13.847 回答
0

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

于 2009-07-21T19:05:09.007 回答
0

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

于 2009-07-22T03:45:37.977 回答