Access DAO 为 Access 97 文件引发 COMException
Posted
技术标签:
【中文标题】Access DAO 为 Access 97 文件引发 COMException【英文标题】:Access DAO throws COMException for Access 97 files 【发布时间】:2021-02-20 18:59:53 【问题描述】:我们使用 Microsoft.Office.Interop.Access.Dao(版本 15.0.0.0)库来访问 Microsoft Access 文件中的信息,因为它允许我们实现其他库所缺乏的一些功能(例如重新链接数据库表的能力) )。 这对所有类型的 Access 文件都非常有效,除了 Access 97 .mdb 文件。调用 OpenDatabase 方法时,我们会定期收到异常。
var engine = new DBEngine();
var db = engine.OpenDatabase(path);
它会定期抛出 COMException
类型:System.Runtime.InteropServices.COMException
消息:无法打开使用以前版本的 你的申请。
堆栈跟踪:在 Microsoft.Office.Interop.Access.Dao.DBEngineClass.OpenDatabase(字符串 名称、对象选项、对象只读、对象连接)
我尝试指定DefaultType,但结果是一样的
engine.DefaultType = (int)WorkspaceTypeEnum.dbUseJet;
我认为这个库的版本不支持 Access 97 文件,但有时它会处理文件。即使它失败了,打开同一组文件的第二次尝试几乎总是成功的。所以我想知道这些不一致是否有具体原因,是否有人有解决这些问题的经验。
【问题讨论】:
【参考方案1】:Access 数据库引擎 (ACE) 组件(例如 ACEDAO.DLL)的 15.x 版本对应于 Access_2013,并且 Access_2013完全放弃了对 Access_97 文件格式的支持。如果OpenDatabase
有时有效,有时会抛出
无法打开使用以前版本的应用程序创建的数据库。
那么前者只是侥幸。 (在尝试禁用 Access_97 格式时,开发人员显然错过了一两个代码路径。)
TL;DR – 不要指望能够将 Access_97 文件与 Access_2013+ 一起使用。将 Access_97 文件转换为您的 Access 版本支持的格式。
【讨论】:
我不想有这样的“侥幸”,至少知道它真的无法处理 Access 97 文件:) 不幸的是,我无法转换文件,因为这些是文件用户上传,我们无权更改其文件格式或要求他们更改文件。我认为唯一适用的方法是对 Access 97 文件使用旧 DAO(3.51 或 3.6)库,并根据文件类型在旧 DAO 和 15.x 之间动态选择方法... “我认为唯一适用的方法是对 Access 97 文件使用旧的 DAO(3.51 或 3.6)库……” - 是的,这可能是您所希望的最好的方法。以上是关于Access DAO 为 Access 97 文件引发 COMException的主要内容,如果未能解决你的问题,请参考以下文章