【问题标题】:Querying Jet Databases/Excel files with C# under x64 OSx64 OS下使用C#查询Jet Databases/Excel文件
【发布时间】:2023-04-06 22:32:01
【问题描述】:

所以我了解到,用于查询 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 常量,DataSourceWrapper & datasrcWrapper) 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString 常量,OleDbConnection 连接) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions 选项,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningObject)

【问题讨论】:

    标签: odbc 64-bit oledb jet


    【解决方案1】:

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

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

    【讨论】:

    • 不幸的是,我的这个需求只是主要应用程序的一小部分。由于这个愚蠢的功能,我不想强​​迫整个应用程序使用 x86。然而,x86 构建是最后的手段。
    【解决方案2】:

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

    【讨论】:

    • 我刚刚花了一些时间搜索我上周刚刚阅读的一篇 MSDN 文章,但找不到。我的记忆是,如果您使用 ACE OLEDB 提供程序,有一些方法可以在 64 位环境中使用它。不幸的是,我现在找不到它,但它可能会为某人提供搜索线索。
    • 这种情况不再出现,请参阅my answer
    【解决方案3】:

    现在有一个用于 JetSQL 的 64 位 ODBC 驱动程序。它是Microsoft Access Database Engine 2010 Redistributable。我没有将它用于OLEDB,但我已经用它来制作新的Microsoft Access databases with PowerShell

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 2020-05-17
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多