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

VB.NET中ADOX.Catalog设置ActiveConnection触发COMException求助

问题解决:ADOX.Catalog赋值连接字符串触发COM异常

核心原因

ADOX.Catalog的ActiveConnection属性不支持直接传入字符串格式的连接字符串,必须传入已打开的ADODB.Connection对象。直接赋值字符串会导致参数类型不匹配,触发COM异常。

修复后的代码

Imports System.Collections.ObjectModel
Imports System.Data.OleDb
Imports ADOX
Imports ADODB
Imports System.Data.Common

Module Module1

    Public Sub Main()
        Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\access\base.accdb;"

        ' 先创建并打开ADODB.Connection对象
        Dim adodbConn As New Connection()
        adodbConn.Open(connectionString)

        ' 将打开的连接赋值给Catalog的ActiveConnection
        Dim cat As New Catalog()
        cat.ActiveConnection = adodbConn

        ' 创建新表
        Dim table As New Table()
        table.Name = "Employees"

        ' 创建ID字段(设置自增主键)
        Dim idField As New ADOX.Column()
        idField.Name = "ID"
        idField.Type = ADOX.DataTypeEnum.adInteger
        idField.ParentCatalog = cat
        idField.Properties("AutoIncrement").Value = True
        table.Columns.Append(idField, ADOX.DataTypeEnum.adInteger, 0)
        table.Keys.Append("PK_Employees", KeyTypeEnum.adKeyPrimary, idField)

        ' 创建Name字段
        Dim nameField As New ADOX.Column()
        nameField.Name = "Name"
        nameField.Type = ADOX.DataTypeEnum.adVarWChar
        nameField.DefinedSize = 50 ' 明确指定字符长度
        nameField.ParentCatalog = cat
        table.Columns.Append(nameField, ADOX.DataTypeEnum.adVarWChar, 50)

        ' 添加表到数据库
        cat.Tables.Append(table)

        ' 复用已打开的连接插入数据(ID自增无需手动赋值)
        Dim command As New Command()
        command.ActiveConnection = adodbConn
        command.CommandText = "INSERT INTO Employees (Name) VALUES ('John')"
        command.Execute()

        ' 关闭连接
        adodbConn.Close()
    End Sub

End Module

额外注意事项

  • 平台兼容性:确保项目目标平台(x86/x64)与安装的Access Database Engine位数一致。64位引擎对应项目x64平台,32位引擎对应x86,否则会出现连接失败或COM异常。
  • 字段定义优化:添加字段时建议明确指定DefinedSize(如字符串字段长度),同时为ID字段设置自增和主键,保证数据完整性。
  • 资源管理:生产环境中建议用Using语句管理ADODB.Connection、Command等对象,确保资源自动释放,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Дима

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:57:21