Access DAO抛出Access 97文件的COMException

问题描述

我们正在使用Microsoft.Office.Interop.Access.Dao(版本15.0.0.0)库访问Microsoft Access文件中的信息,因为它使我们能够实现其他库所缺少的某些功能(例如重新链接数据库表的功​​能) )。 这对于Access 97 .mdb文件以外的所有类型的Access文件都非常有效。调用OpenDatabase方法时,我们会定期获取异常。

var engine = new DBEngine(); 
var db = engine.OpenDatabase(path);

它会定期抛出COMException

类型:System.Runtime.InteropServices.COMException

消息:无法打开使用先前版本的数据库创建的数据库 您的应用程序。

StackTrace:位于 Microsoft.Office.Interop.Access.Dao.DBEngineClass.OpenDatabase(String 名称,对象选项,对象只读,对象连接)

我尝试指定DefaultType,但结果相同

engine.DefaultType = (int)WorkspaceTypeEnum.dbUseJet;

我认为该库的版本不支持Access 97文件,但有时它会处理文件。即使失败,第二次打开同一组文件的尝试总是总是成功的。因此,我想知道是否存在这些不一致的特定原因,以及是否有人有解决这些不一致的经验。

解决方法

Access数据库引擎(ACE)组件的

版本15.x(例如ACEDAO.DLL)对应于Access_2013,并且Access_2013 完全放弃了对Access_97文件格式的支持。如果OpenDatabase有时有效,有时会抛出

无法打开使用先前版本的应用程序创建的数据库。

那么前者只是just幸。 (在尝试禁用Access_97格式时,开发人员显然错过了一两个代码路径。)

TL; DR –不要指望能够在Access_2013 +中使用Access_97文件。将Access_97文件转换为您的Access版本支持的格式。