Поделиться через


Диалект LDAP

Диалект LDAP — это формат инструкций запросов, использующих синтаксис фильтра поиска LDAP. Используйте инструкцию запроса LDAP со следующими интерфейсами поиска ADSI:

  • Интерфейсы объектов данных ActiveX (ADO), которые являются интерфейсами автоматизации, используюющими OLE DB.
  • OLE DB, который представляет собой набор интерфейсов C/C++ для запросов к базам данных.
  • IDirectorySearch, который является интерфейсом C/C++ для Active Directory.

Строка диалекта LDAP состоит из четырех частей, разделенных точкой с запятой (;).

  • Базовое различающееся имя. Например:

    <LDAP://DC=Fabrikam,DC=COM>
    
  • Фильтры поиска LDAP. Дополнительные сведения о фильтрах поиска см. в разделе "Синтаксис фильтра поиска".

  • Отображаемое имя LDAP атрибутов для получения. Несколько атрибутов разделены запятыми.

  • Задает область поиска. Допустимые значения: base, onelevel и subtree. Область, указанный в строке запроса LDAP, переопределяет все область поиска, указанные свойством SearchScope объекта команды ADO.

Ниже приведен пример кода диалекта LDAP в ADSI, который выполняет поиск всех объектов в поддереве.

"<LDAP://DC=Fabrikam,DC=com>;(objectClass=*);AdsPath, cn;subTree"

Не все параметры поиска (например, размер страницы поиска) можно выразить на диалекте LDAP, поэтому необходимо задать параметры перед запуском фактического выполнения запроса.

Пример кода для выполнения запроса LDAP

В следующем примере кода показано, как использовать запрос LDAP

Dim con As New Connection, rs As New Recordset
Dim adVariant
Dim i 'Used for counter
Dim j 'Used for counter
Dim Com As New Command
Dim strDomain As String
Dim strPassword As String
 
' Open a Connection object.
con.Provider = "ADsDSOObject"
con.Properties("ADSI Flag") = 1
con.Properties("User ID") = strDomain + "\" + strUserID
con.Properties("Password") = strPassword

con.Open "Active Directory Provider"
 
' Create a command object on this connection.
Set Com.ActiveConnection = con
 
' Set the query string.
Com.CommandText = "<LDAP://MyServer/DC=MyDomain,DC=Fabrikam,DC=com>;
     (objectClass=*);ADsPath, objectclass;base"
 
' Set search preferences.
Com.Properties("Page Size") = 1000
Com.Properties("Timeout") = 30 'seconds
 
' Execute the query.
Set rs = Com.Execute
 
' Navigate the record set.
rs.MoveFirst
While Not rs.EOF
    For i = 0 To rs.Fields.Count - 1
        If rs.Fields(i).Type = adVariant And Not (IsNull(rs.Fields(i).Value)) Then
            Debug.Print rs.Fields(i).Name, " = "
            For j = LBound(rs.Fields(i).Value) To UBound(rs.Fields(i).Value)
                Debug.Print rs.Fields(i).Value(j), " # "
            Next j
        Else
            Debug.Print rs.Fields(i).Name, " = ", rs.Fields(i).Value
        End If
    Next i
    rs.MoveNext
Wend
 
rs.MoveLast
Debug.Print "No. of rows = ", rs.RecordCount

Дополнительные сведения о синтаксисе запроса см. в разделе "Синтаксис фильтра поиска".

Синтаксис фильтра поиска

Диалект SQL

Поиск с помощью интерфейса IDirectorySearch

Поиск с помощью объектов данных ActiveX

Поиск с помощью OLE DB