目录服务搜索超出范围错误
DirectoryServices Search Out of Range Error
我正在尝试获取完整的用户列表及其电子邮件地址。在尝试了很多事情之后,下面终于给了我某种形式的快乐但是我得到了这个错误这个错误:
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
有人知道为什么会发生这种情况以及如何防止这种情况发生吗?
完整代码如下。
Dim entry As DirectoryEntry = Nothing
Dim search As DirectorySearcher = Nothing
entry = New DirectoryEntry()
search = New DirectorySearcher()
search.Filter = "(&(objectCategory=person)(objectClass=user)(mail=*@companyname.com*))"
search.Sort.PropertyName = "cn"
Dim result As SearchResultCollection = search.FindAll()
For Each res As SearchResult In result
Dim Name = res.Properties("cn")(0).ToString()
Dim Email = res.Properties("mail")(0).ToString()
WindowsForm1.ListBox1.Items.Add(Name & " <" & Email & ">")
Next
entry.Dispose()
search.Dispose()
result.Dispose()
看起来这是假设 res.Properties 具有键 "cn" 和 "mail",其值是至少包含一个元素的数组。
res.Properties("cn")(0).ToString()
这表示 'convert the first element in the array from res.Properties whose key name is cn to a string.' 这听起来令人困惑,因为它确实如此。它假定您 知道 :
- res.Properties 有一个键名为 cn
的元素
- 该元素有一个数组类型的值
- 该数组在位置 0 处有一个元素
- 该位置的元素可以转换为字符串
尝试访问它们之前先检查一下。我没有研究任何类型特定的功能,但下面应该可以工作。
Dim Name, Email as String
If Not IsNothing(res.Properties("cn")) AndAlso res.Properties("cn").Count > 0 AndAlso Not IsNothing(res.Properties("mail")) AndAlso res.Properties("mail").Count > 0 Then
Name = res.Properties("cn")(0)
Email = res.Properties("mail")(0)
End If
这应该更清楚,但想法和根本原因是相同的 - 我们试图避免访问数组的值,直到我们确定我们有一个数组,该数组具有要在第一名。始终验证您的数据。
我正在尝试获取完整的用户列表及其电子邮件地址。在尝试了很多事情之后,下面终于给了我某种形式的快乐但是我得到了这个错误这个错误:
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
有人知道为什么会发生这种情况以及如何防止这种情况发生吗? 完整代码如下。
Dim entry As DirectoryEntry = Nothing
Dim search As DirectorySearcher = Nothing
entry = New DirectoryEntry()
search = New DirectorySearcher()
search.Filter = "(&(objectCategory=person)(objectClass=user)(mail=*@companyname.com*))"
search.Sort.PropertyName = "cn"
Dim result As SearchResultCollection = search.FindAll()
For Each res As SearchResult In result
Dim Name = res.Properties("cn")(0).ToString()
Dim Email = res.Properties("mail")(0).ToString()
WindowsForm1.ListBox1.Items.Add(Name & " <" & Email & ">")
Next
entry.Dispose()
search.Dispose()
result.Dispose()
看起来这是假设 res.Properties 具有键 "cn" 和 "mail",其值是至少包含一个元素的数组。
res.Properties("cn")(0).ToString()
这表示 'convert the first element in the array from res.Properties whose key name is cn to a string.' 这听起来令人困惑,因为它确实如此。它假定您 知道 :
- res.Properties 有一个键名为 cn 的元素
- 该元素有一个数组类型的值
- 该数组在位置 0 处有一个元素
- 该位置的元素可以转换为字符串
尝试访问它们之前先检查一下。我没有研究任何类型特定的功能,但下面应该可以工作。
Dim Name, Email as String
If Not IsNothing(res.Properties("cn")) AndAlso res.Properties("cn").Count > 0 AndAlso Not IsNothing(res.Properties("mail")) AndAlso res.Properties("mail").Count > 0 Then
Name = res.Properties("cn")(0)
Email = res.Properties("mail")(0)
End If
这应该更清楚,但想法和根本原因是相同的 - 我们试图避免访问数组的值,直到我们确定我们有一个数组,该数组具有要在第一名。始终验证您的数据。