你是如何安装32位和64位Oracle客户端的?
请看一下这个指令:BadImageFormatException。当在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时,会发生这种情况 https://stackoverflow.com/questions/24104210/badimageformatexception-this-will-occur-when-running-in-64-bit-mode-with-the-32#24120100
简洁版本:
你的excel是32位的,你尝试使用32位的Oracle。我假设您启动了 64 位版本的“ODBC 管理器” - 可能存在不匹配。或者你的操作有问题PATH
关于%ORACLE_HOME%
and/or %ORACLE_HOME%\bin
folder
长版:
您的 Excel 是 32 位的,因此一般来说,您通过将 32 位客户端放入PATH
并为ORACLE_HOME
,您不能在一个进程中混合使用 32 位和 64 位程序集。顺便说一句,当您按照上述说明操作时,您的 Windows 将自动管理此操作。
我假设您安装了 Oracle Instant Client。默认的 Instant Client 既不包含任何 ODBC 驱动程序,也不包含 Oracle Data Provider (ODP.NET、Oracle.DataAccess.Client
)
ODBC
您可能有 2 个 ODBC 驱动程序,其中一个来自 Oracle,通常称为OraClient12_home1 中的 Oracle微软的一款名为适用于 Oracle 的 Microsoft ODBC(Windows 默认安装,但它还需要 Oracle 客户端)。
Oracle 的 ODBC 驱动程序适用于 32 位和 64 位,Microsoft 驱动程序仅适用于 32 位。您有 2 个 ODBC 管理员,32 位(运行c:\Windows\SysWOW64\odbcad32.exe
)和 64 位(运行c:\Windows\System32\odbcad32.exe
)。在那里您应该可以看到已安装的 32 位驱动程序。 64 位。
甲骨文数据提供商
对于数据提供者来说,您也有类似的情况。您有一个来自 Microsoft 的 (适用于 Oracle 的 Microsoft .NET Framework 数据提供程序, System.Data.OracleClient
)和来自甲骨文(适用于 .NET 的 Oracle 数据提供程序, Oracle.DataAccess.Client
,多个版本)。两者均适用于 32 位和 64 位。
原则上,使用哪个驱动程序/提供程序连接到 Oracle 并不重要 - 只是架构(即 32 位与 64 位)必须匹配。每个驱动程序/提供商都需要相应的 Oracle 客户端安装。 Microsoft 的所有驱动程序/提供程序均已弃用,您应该更喜欢 Oracle 驱动程序/提供程序(如警告消息中所述)
Others
Oracle 还提供了ODP.NET,托管驱动程序它不需要任何进一步的 Oracle 客户端安装,并且可以在 32 位和 64 位上运行。不过,我不知道你是否可以在Excel中使用这个。
最后但并非最不重要的一点是,您还有 OLE DB 提供程序。又是一个来自微软的(适用于 Oracle 的 Microsoft OLE DB 提供程序)和来自 Oracle 的一个(OLE DB 的 Oracle 提供程序)。 Microsoft 提供程序仅适用于 32 位,并且已被弃用。