所以我了解到用于查询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连接) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options,Object poolGroupProviderInfo,DbConnectionPool pool,DbConnection owningObject)
答案 0 :(得分:3)
这里发生的是x64程序集正在尝试调用x86 COM组件。 x64应用程序不会在主x64注册表中看到COM注册,因为它们位于wow6432node配置单元中。
最简单的解决方法是使用x86目标平台构建应用程序,然后让它在x64机器上运行在WOW上。该应用程序将以32位运行,并能够看到它需要的32位COM对象。
答案 1 :(得分:2)
我在最近的研究中看到的一切证实了你所看到的 - 那里根本就没有64位的Jet驱动程序。另外,我在THIS线程上发现了一个帖子似乎证实了64位MSDASQL没有帮助,因为它实际上只是一个包装器(参见5月8日Ricky Wen的最后一篇文章)。您唯一的选择是通过32位代理链接,也许是另一个32位SQL服务器。我可能最终自己这样做,直到我可以将Jet数据移动到SQL。
答案 2 :(得分:1)
现在有一个用于JetSQL的64位ODBC驱动程序。这是Microsoft Access Database Engine 2010 Redistributable。我没有将它用于OLEDB,但我用它来制作新的Microsoft Access databases with PowerShell。