BadImageFormatException. 当使用32位Oracle客户端组件并在64位模式下运行时,会出现此错误。

52

我的一个.Net应用程序试图连接Oracle数据库时出现了此错误。

错误提示说:当在64位模式下安装32位Oracle客户端组件时,将会发生此问题。但我已经多次确认客户端已经安装在x64位而不是32位。

Date Time: 6/8/2014 10:57:55 AM: System.InvalidOperationException: 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. ---> System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
       at System.Data.Common.UnsafeNativeMethods.OCILobCopy2(IntPtr svchp, IntPtr errhp, IntPtr dst_locp, IntPtr src_locp, UInt64 amount, UInt64 dst_offset, UInt64 src_offset)
       at System.Data.OracleClient.OCI.DetermineClientVersion()
       --- End of inner exception stack trace ---
       at System.Data.OracleClient.OCI.DetermineClientVersion()
       at System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
       at System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
       at System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
       at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       at System.Data.OracleClient.OracleConnection.Open()
       at CustomizedSetupInstaller.Runscripts.InitializeDBObjects(String connectionString, String dbProvider)

7
您正在使用System.Data.OracleClient。该命名空间已被弃用,并将在未来的 .NET 版本中删除。也许您正在使用32位版本?它也不是 Oracle 客户端的一部分,因此无论您使用的是32位还是64位 Oracle 客户端都是无关紧要的。理想情况下,您应该改为使用 Oracle.DataAccess(或 Oracle.ManagedDataAccess)。 - Luke Woodward
5
小错误:System.Data.OracleClient只是提供程序,它还使用一个必须与架构匹配的Oracle客户端。只有Oracle.ManagedDataAccess不需要安装额外的Oracle客户端。也许Oracle客户端是x64,但你的应用程序是32位的,这也行不通。可以在同一台机器上安装32位和64位的Oracle客户端。 - Wernfried Domscheit
22个回答

-2

对于 SSIS 2008,只需激活32位运行,如下图(点击此链接) Orcale ssis 2008


-4

只需在x86模式下构建您的代码,而不是在AnyCpu模式下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接