Microsoft.Jet.OleDb和Microsoft.Ace.OleDb之间的区别

自从我使用“Microsoft.Jet.Oledb”驱动程序访问和显示数据的Classic ASP和Microsoft Access进行了一些编程以来,已经有好几年了。

我被要求使用“Microsoft.Ace.Oledb”访问MS Excel数据。 我发现这是“Microsoft Access 2010 Engine Redistributable”下载的一部分。

我想知道如果“Microsoft.Jet.OleDb”已经取代了“Microsoft.Ace.Oledb”驱动程序,并且基本上是相同的还是完全不同的东西?

另外,您是否在购买MS Access 2010时通常会获得“Microsoft.Ace.Oledb”驱动程序?

这主要是一个历史的问题,有效的ACE已经取代了JET:

维基百科很详细地回答你的问题 。

最相关的部分是:

从版本2007开始,Access包括一个特定于Office的Jet版本,最初称为Office Access Connectivity Engine(ACE),但现在称为Access数据库引擎。 该引擎完全向后兼容以前版本的Jet引擎,因此它读取和写入早期Access版本的(.mdb)文件。 它引入了一个新的默认文件格式(.accdb),对Access进行了一些改进,包括复杂的数据types,如多值字段,附件数据types和备注字段中的历史跟踪。 它还提高了安全性和encryptionfunction,并支持与Microsoft Windows SharePoint Services 3.0和Microsoft Office Outlook 2007的集成

另外,ACE提供了一个64位驱动程序,因此可以在64位机器上使用,而JET则不能。

该驱动程序不是Windows操作系统的一部分,但作为一个可再发行组件。[11] 以前,Jet数据库引擎只有32位,并没有在64位版本的Windows下本地运行。

至于你的问题的第二部分,我最近安装了Office 2010,我不得不单独下载ACE组件。 我从链接Microsoft Access数据库引擎2010可再发行组件 。 这可能是因为我在64位Windows上安装了32位版本的Office; 无论如何,必要的文件很容易从微软获得。

当用于基本操作时,驱动程序本质上是相同的,并且显示与更复杂的东西(工会,嵌套查询等)的显着差异。

根据个人经验,ACE不提供完全向后兼容的结果。 它可能会打开并读取/写入以前的.mdb格式,但数据types转换完全相同的查询中有更改。

例如,当在JET用来返回TEXT(255)结果的TEXT字段上使用UNION时,ACE会返回MEMO?!

与BI或报表工具(如Crystal Reports)结合使用会产生很多麻烦。