3

因此,我了解到用于查询 Microsoft Access MDB 文件和 Excel 电子表格等数据源的Microsoft.Jet.OLEDB.4.0数据提供程序在 Windows 64 位操作系统下不起作用。

我现在应该使用什么来查询 .NET 3.5 (C#) 应用程序中的这些文件类型,以确保在 x86 和 x64 环境中的兼容性?我已经搜索了互联网,但似乎无法找到关于如何处理这种不兼容性的直接答案。

我还尝试过使用 ODBC 提供程序和 MSDASQL 提供程序,但没有成功,因为它们似乎会抛出与 Microsoft.JET.OLEDB.4.0 提供程序在 x64 环境中使用时相同的异常(除非我在做一些公然错误的事情)这两个提供程序,即使它们在我的 Windows XP x86 环境下运行良好)。

我发现有人说我需要在 x64 系统中使用%WINDIR%\System32\odbcad32.exe进行 ODBC 连接,但我知道如何使用它。

在 x64 下抛出的示例异常:

************** 异常文本 ************** System.InvalidOperationException:“Microsoft.Jet.OLEDB.4.0”提供程序未在本地机器。在 System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo、DbConnectionPool 池、DbConnection owningObject)

4

3 回答 3

3

这里发生的是 x64 程序集试图调用 x86 COM 组件。x64 应用程序不会在主 x64 注册表中看到 COM 注册,因为它们位于 wow6432node 配置单元中。

最简单的解决方法是使用 x86 目标平台构建应用程序,然后让它在您的 x64 机器上的 WOW 上运行。该应用程序将作为 32 位运行,并且能够查看它需要的 32 位 COM 对象。

于 2008-12-30T17:19:04.570 回答
2

我在自己最近的研究中看到的一切都证实了您所看到的 - 根本没有 64 位 Jet 驱动程序。另外,我在THIS thread 上发现了一篇帖子,似乎证实 64 位 MSDASQL 无济于事,因为它实际上只是一个包装器(参见 Ricky Wen 于 5 月 8 日发布的最后一篇帖子)。您唯一的选择是通过 32 位代理链接,也许是另一个 32 位 SQL 服务器。在我可以将 Jet 数据移动到 SQL 之前,我可能最终会自己这样做。

于 2008-12-30T17:13:33.910 回答
1

现在有一个用于 JetSQL 的 64 位 ODBC 驱动程序。它是Microsoft Access 数据库引擎 2010 Redistributable。我没有将它用于 OLEDB,但我已经用它用 PowerShell 创建了新的 Microsoft Access 数据库

于 2011-08-24T15:04:26.107 回答