8

尝试从 .net 连接到 oracle 数据库时出现以下异常:

Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.

经过许多链接后,我尝试通过将平台目标更改为任何 CPU 来克服此异常。由于它是 wpf 应用程序,因此在更改平台目标后会引发以下异常:

'The invocation of the constructor on type 'SSC_GIP_UI.MainWindow' that matches the specified binding constraints threw an exception.' Line number '3' and line position '9'.

但它在平台目标 x86 上运行良好,没有抛出上述异常,但它抛出了BadImageFormatException

我正在使用的环境是:Windows server 2008、
.net framework 4.0、oracle 11g(64 位)

谁能告诉我。如何解决?

4

3 回答 3

6

此错误表明您的应用程序中的 32 位和 64 位组件不匹配。

当您在 64 位 Windows 中运行应用程序时,它可能以 64 位或 32 位运行。如果您将平台目标设置为 x86,它将以 32 位运行。如果您将平台目标设置为 x64 或 AnyCpu,它将以 64 位运行。

Oracle 有不同版本的客户端,一个是 32 位的,另一个是 64 位的。因此,如果您的应用程序在 32 位模式下运行,则需要确保安装了 32 位 Oracle 客户端。

于 2013-03-19T14:43:42.540 回答
5

我想也许你必须: 打开 IIS,找到这个应用程序使用的应用程序池 转到那个应用程序池,在“启用 32 位应用程序”中设置一个标记

于 2013-03-22T22:22:56.993 回答
1

一个完全替代的解决方案是使用适用于 .NET 的 Oracle 数据提供程序,它可以让您访问 Oracle.ManagedDataAccess dll,无论您是使用 32 位还是 64 位都可以。阅读Oracle Magazine中的这篇文章以获得简要介绍。

您可以使用与 System.Data.OracleClient 几乎相同的方式使用它,尽管我不确定两者之间是否存在相同的功能,因此您的里程可能会有所不同。

于 2016-01-06T13:44:59.707 回答