You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EF Core Jet Provider访问MDB需依赖Access 2010运行时,有无解决方案?

结论

无法通过EF Core Jet Provider实现无额外依赖访问.mdb格式数据库,具体原因如下:

  • 底层组件强依赖限制
    你当前使用的EF Core Jet Provider底层必须调用DAO(数据访问对象)COM组件和Microsoft Jet OLEDB 4.0驱动,这两个组件都不属于Windows系统默认预装的公共组件,只有当环境安装了完整版Microsoft Access、或者Access Database Engine 2010及以上版本的可再分发运行时,才会完成系统注册可以被正常调用。你遇到的报错就是典型的目标系统缺少对应COM组件注册项的异常:

Cannot create database "C:\Users<username>\AppData\Roaming\xxxx\db.mdb" using DAO. ---> System.Runtime.InteropServices.COMException: Die COM-Klassenfactory für die Komponente mit CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} konnte aufgrund des folgenden Fehlers nicht abgerufen werden: 80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

你用到的连接字符串也明确指定了Jet OLEDB驱动依赖,该驱动的正常运行前提就是对应Access运行时已安装:

Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin; Data Source={0};Mode=Share Deny None;Jet OLEDB:Database Password={1};
  • 旧ADO应用无依赖的核心差异
    早期基于原生ADO开发的旧应用如果仅用到了Windows系统预装的MDAC(Microsoft数据访问组件)中的基础接口,且没有涉及数据库创建、Schema修改、复杂查询语法转换这类扩展能力,确实可以做到无额外安装开箱运行。但EF Core Jet Provider为了实现ORM所需的全量功能(包括迁移、自动建库、LINQ查询转Access SQL语法、实体映射校验等),必须依赖DAO的专属接口完成底层操作,无法只调用MDAC的基础能力,因此不能绕开Access运行时依赖。

  • 额外注意事项
    Jet OLEDB驱动和DAO组件属于微软专有可再分发组件,不允许开发者私自打包进应用程序分发,只能引导用户自行安装对应版本的Access Database Engine运行时。同时需要注意应用编译位数要和运行时位数严格匹配:32位应用需要安装32位运行时,64位应用需要安装64位运行时,位数不匹配也会触发同样的类未注册异常。

内容的提问来源于stack exchange,提问作者Tobias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:00:02