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,提问作者Дима
相关产品推荐
相关产品推荐

