VB.NET中无法绑定Recordset到DataGridView及代码报错求助
解决VB.NET中ADSI查询结果绑定DataGridView的问题
核心问题处理
你遇到的两个关键问题可以通过以下方式解决:
1. 修复SearchScope属性赋值报错
在VB.NET中操作ADSI Command对象的属性时,必须通过.Value属性赋值,原代码修改为:
oCommand1.Properties("SearchScope").Value = 2
(数值2对应ADS_SCOPE_SUBTREE,表示递归搜索整个目录树)
2. 将COM类型RecordSet转换为.NET DataTable
DataGridView无法直接绑定COM类型的RecordSet,需要先把查询结果迁移到.NET原生的DataTable中,再进行绑定。
修改后的完整可运行代码
Imports System.Data Imports ADODB ' 需添加COM引用:Microsoft ActiveX Data Objects x.x Library(建议选最新版本如6.1) ' 方法内执行代码 Dim oConnection1 As New ADODB.Connection() Dim oCommand1 As New ADODB.Command() Dim rs As ADODB.Recordset Dim strQuery As String Dim dt As New DataTable() ' 打开AD连接 oConnection1.Provider = "ADsDSOObject" oConnection1.Open("Active Directory Provider") oCommand1.ActiveConnection = oConnection1 ' 构造AD查询语句 strQuery = "select c, l, SAMAccountName,displayName, distinguishedName, cn, sn,givenName,title,mail, department, manager, userAccountControl " & " from 'GC://dc=TestAD,dc=net'" & " WHERE objectCategory='Person'" & " AND objectClass='user'" oCommand1.CommandText = strQuery ' 修复SearchScope属性赋值 oCommand1.Properties("SearchScope").Value = 2 ' 执行查询 rs = oCommand1.Execute() ' 将RecordSet数据填充到DataTable ' 生成DataTable列 For Each fld As ADODB.Field In rs.Fields dt.Columns.Add(fld.Name, GetType(String)) Next ' 逐行填充数据 rs.MoveFirst() While Not rs.EOF Dim dr As DataRow = dt.NewRow() For Each fld As ADODB.Field In rs.Fields dr(fld.Name) = If(IsDBNull(fld.Value), DBNull.Value, fld.Value) Next dt.Rows.Add(dr) rs.MoveNext() End While ' 绑定到DataGridView并更新计数 lblRecords.Text = dt.Rows.Count.ToString() DataGridView1.DataSource = dt ' 释放COM资源,避免内存泄漏 rs.Close() oConnection1.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(rs) System.Runtime.InteropServices.Marshal.ReleaseComObject(oCommand1) System.Runtime.InteropServices.Marshal.ReleaseComObject(oConnection1)
注意事项
- 必须添加ADODB引用:右键项目→添加引用→COM→找到
Microsoft ActiveX Data Objects x.x Library并勾选 - 处理空值时用
If(IsDBNull(...))避免类型转换错误 - 手动释放COM对象,防止.NET运行时无法自动回收资源
内容的提问来源于stack exchange,提问作者RKh
相关产品推荐
相关产品推荐

