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

VB.NET用ADOX创建.accdb数据库时msadox28.tlb注册报错如何解决

解决方案

1 修复环境配置错误

  • 移除项目中多余的Microsoft ADO extend 2.8引用,仅保留Microsoft ADO Ext. 6.0 for DDL and Security引用即可,多个版本引用混存会导致COM实例创建冲突。
  • 你此前对msadox28.tlb的注册操作是错误的:regasm仅用于注册.NET程序集,tlb是COM类型库不需要使用regasm注册,此前注册msadox.dll成功已经满足ADOX运行的基础要求,不用再处理类型库注册的问题。
  • 确认你的Windows 10系统已安装对应架构的Microsoft Access 数据库引擎可再发行包:如果你的Office是32位版本,安装32位引擎;如果是64位Office,安装64位引擎,两者必须匹配,否则会出现COM类未注册的报错。
  • 项目目标CPU不要设置为Any CPU,强制指定为和你安装的Access数据库引擎一致的架构:32位引擎选x86,64位引擎选x64,避免系统自动适配架构导致和引擎版本不匹配。

2 更换为支持ACCDB格式的连接字符串

你之前使用的Microsoft.Jet.OLEDB.4.0是老旧的Jet引擎,仅支持2003及以前版本的mdb格式,无法创建accdb文件,需要更换为ACE引擎的连接字符串,示例如下:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=你的目标路径\目标文件名.accdb;Jet OLEDB:Engine Type=6

其中Engine Type=6对应Access 2007及以上版本的accdb格式,不要和此前创建mdb用的Type=5混淆。

3 可用参考代码

Imports System.Runtime.InteropServices
Imports ADOX

Public Class DatabaseCreator
    Public Function CreateAccdb(filePath As String) As Boolean
        Dim cat As Catalog = Nothing
        Try
            cat = New Catalog()
            Dim connStr As String = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath};Jet OLEDB:Engine Type=6"
            cat.Create(connStr)
            Return True
        Catch ex As Exception
            ' 可自行添加异常日志逻辑
            Return False
        Finally
            ' 必须释放COM对象,避免资源泄漏
            If cat IsNot Nothing Then
                Marshal.ReleaseComObject(cat)
            End If
        End Try
    End Function
End Class

补充排查

如果执行时仍提示提供程序未注册,直接重新核对Access数据库引擎的架构和项目目标CPU架构是否一致,绝大多数报错都是该原因导致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:02