【发布时间】:2014-07-29 01:04:39
【问题描述】:
当我的 .Net 应用程序尝试连接到 oracle 数据库时,我收到此错误。
错误提示This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.。 But I have made sure 很多时候客户端安装在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)
【问题讨论】:
-
您使用的是
System.Data.OracleClient。这个命名空间has been deprecated and will be removed in a future version of .NET。也许您正在使用它的 32 位版本?它也不是 Oracle 客户端的一部分,因此无论您使用的是 32 位还是 64 位 Oracle 客户端都无关紧要。理想情况下,您应该改用Oracle.DataAccess(或Oracle.ManagedDataAccess)。 -
小错误:
System.Data.OracleClient只是提供者,它还使用了必须与架构匹配的 Oracle 客户端。只有Oracle.ManagedDataAccess不需要安装额外的Oracle 客户端。也许 Oracle 客户端是 x64,但您的应用程序是 32 位的,这也不起作用。可以在同一台机器上同时安装 32 位和 64 位 Oracle 客户端