Udostępnij przez


Wyszukiwanie za pomocą obiektów danych ActiveX (ADO)

Model obiektu danych ActiveX (ADO) składa się z obiektów wymienionych w poniższej tabeli.

Obiekt Opis
Połączenie Otwarte połączenie ze źródłem danych OLE DB, takim jak ADSI.
poleceń Definiuje określone polecenie uruchamiane względem źródła danych.
parametru Opcjonalna kolekcja dla wszystkich parametrów, które mają być przekazywane do obiektu polecenia.
RecordSet Zestaw rekordów z tabeli, obiektu polecenia lub składni SQL. Zestaw rekordów można utworzyć bez żadnego bazowego obiektu połączenia.
pól Pojedyncza kolumna danych w zestawie rekordów.
właściwości Kolekcja wartości dostarczonych przez dostawcę dla ADO.
błędów Zawiera dane o błędach dostępu do danych. Odświeżone, gdy wystąpi błąd w ramach jednej operacji.

Aby ADO komunikowało się z usługą ADSI, muszą istnieć co najmniej dwa obiekty ADO: Connection i RecordSet. Te obiekty ADO służą odpowiednio do uwierzytelniania użytkowników i wyliczania wyników. Zazwyczaj używa się również obiektu Command do utrzymania aktywnego połączenia, określenia parametrów zapytania, takich jak rozmiar strony i zakres wyszukiwania, oraz wykonania zapytania. Aby uzyskać więcej informacji na temat składni filtru wyszukiwania, zobacz Składnia filtru wyszukiwania.

Obiekt Connection ładuje dostawcę OLE DB i weryfikuje poświadczenia użytkownika. W Visual Basic wywołaj funkcję CreateObject z parametrem "ADODB.Connection" w celu utworzenia instancji obiektu Connection, a następnie ustaw właściwość Provider obiektu Connection na "ADsDSOObject". "ADODB.Connection" jest ProgID obiektu Connection i "ADsDSOObject" jest nazwą dostawcy OLE DB w ADSI. Jeśli nie określono żadnych poświadczeń, używane są poświadczenia aktualnie zalogowanego użytkownika.

Poniższy przykład kodu pokazuje, jak utworzyć wystąpienie obiektu Connection.

Set con = CreateObject("ADODB.Connection")
con.Provider = "ADsDSOObject"

Poniższy przykład kodu pokazuje, jak utworzyć wystąpienie obiektu Connection.

<%
Set con = Server.CreateObject("ADODB.Connection")
con.Provider = "ADsDSOObject"
%>

Poniższy przykład kodu pokazuje, jak utworzyć wystąpienie obiektu Connection. Należy pamiętać, że musisz dołączyć bibliotekę typów ADO (msadoXX.dll) jako jedną z odwołań w projekcie Visual Basic.

Dim Con As New Connection
con.Provider = "ADsDSOObject"

Określ dane uwierzytelniania użytkownika, ustawiając właściwości obiektu Connection. W poniższej tabeli wymieniono właściwości uwierzytelniania użytkowników obsługiwane przez interfejs ADSI.

Własność Opis
"Identyfikator użytkownika" Ciąg identyfikujący użytkownika, którego kontekst zabezpieczeń jest używany podczas wyszukiwania. Aby uzyskać więcej informacji na temat formatu ciągu nazwy użytkownika, zobacz IADsOpenDSObject::OpenDSObject. Jeśli nie zostanie określony, wartość domyślna to zalogowany użytkownik lub użytkownik personifikowany przez proces wywołujący.
"Hasło" Ciąg określający hasło użytkownika zidentyfikowanego przez "Identyfikator użytkownika".
"Szyfruj hasło" Wartość logiczna określająca, czy hasło jest szyfrowane. Wartość domyślna to false.
Flaga ADSI Zestaw flag z wyliczenia ADS_AUTHENTICATION_ENUM, które określają opcje uwierzytelniania powiązania. Wartość domyślna to zero.

Poniższy przykład kodu pokazuje, jak właściwości są ustawiane przed utworzeniem obiektu Command.

Set oConnect = CreateObject("ADODB.Connection")
oConnect.Provider = "ADsDSOObject"
oConnect.Properties("User ID") = stUser
oConnect.Properties("Password") = stPass
oConnect.Properties("Encrypt Password") = True
oConnect.Open "DS Query", stUser, stPass

Drugim obiektem ADO jest obiekt polecenie . ProgID obiektu Command to "ADODB.Command". Ten obiekt pozwala na wydawanie instrukcji zapytań i innych poleceń do ADSI przy użyciu aktywnego połączenia. Obiekt Command używa właściwości ActiveConnection do utrzymywania aktywnego połączenia. Obsługuje również właściwość CommandText do przechowywania instrukcji zapytania wydanych przez użytkownika. Instrukcje zapytania są wyrażane w dialektu SQL lub dialektu LDAP.

W poniższych przykładach kodu pokazano, jak utworzyć obiekt polecenia .

Set command = CreateObject("ADODB.Command")
Set command.ActiveConnection = oConnect
command.CommandText = 
"SELECT AdsPath, cn FROM 'LDAP://DC=Fabrikam,DC=com' WHERE objectClass = '*'"

W poniższym przykładzie kodu dołącz bibliotekę typów ADO (msadoXX.dll) jako jedną z odwołań.

Dim command As New Command
Set command.ActiveConnection = oConnect
command.CommandText = "<LDAP://DC=Fabrikam,DC=com>;(objectClass=*);AdsPath, cn; subTree"

Opcje wyszukiwania obiektu polecenia są określane przez ustawienie właściwości właściwości. W poniższej tabeli wymieniono dopuszczalne właściwości nazwane dla właściwości .

Nazwana właściwość Opis
Asynchroniczny Wartość logiczna określająca, czy wyszukiwanie jest synchroniczne, czy asynchroniczne. Wartość domyślna to False (synchroniczna). Synchroniczne wyszukiwanie blokuje do momentu, aż serwer zwróci cały wynik, a w przypadku wyszukiwania stronicowanego całą stronę. Asynchroniczne wyszukiwanie blokuje wykonanie do momentu, gdy dostępny jest jeden wiersz wyników wyszukiwania lub do czasu, gdy przekroczy czas oczekiwania określony przez właściwość "Limit czasu".
Zapamiętuj wyniki w pamięci podręcznej Wartość logiczna określająca, czy wynik powinien być buforowany po stronie klienta. Wartość domyślna to true; Narzędzie ADSI buforuje zestaw wyników. Wyłączenie tej opcji może być pożądane w przypadku dużych zestawów wyników.
Zabieganie o polecenia Wartość z ADS_CHASE_REFERRALS_ENUM, która określa sposób śledzenia poleceń w wyszukiwaniu. Wartość domyślna to ADS_CHASE_REFERRALS_NEVER. Aby uzyskać więcej informacji na temat tej właściwości, zobacz Polecenia.
"Tylko nazwy kolumn" Wartość logiczna wskazująca, że wyszukiwanie powinno pobrać tylko nazwę atrybutów, do których przypisano wartości. Wartość domyślna to false.
"Deref Aliases" Wartość logiczna określająca, czy aliasy znalezionych obiektów są rozwiązywane. Wartość domyślna to false.
"Rozmiar strony" Wartość całkowita, która włącza stronicowanie i określa maksymalną liczbę obiektów, jaką można zwrócić w zestawie wyników. Wartość domyślna to brak rozmiaru strony. Aby uzyskać więcej informacji, zobacz Pobieranie dużych zestawów wyników.
"Zakres wyszukiwania" Wartość z wyliczenia ADS_SCOPEENUM, która określa zakres wyszukiwania. Wartość domyślna to ADS_SCOPE_SUBTREE.
"Limit rozmiaru" Wartość całkowita określająca limit rozmiaru wyszukiwania. W przypadku usługi Active Directory limit rozmiaru określa maksymalną liczbę zwracanych obiektów. Serwer zatrzymuje wyszukiwanie po osiągnięciu limitu rozmiaru i zwraca skumulowane wyniki. Wartość domyślna to brak limitu.
"Sortuj według" Ciąg określający rozdzielaną przecinkami listę atrybutów do użycia jako klucze sortowania. Ta właściwość działa tylko w przypadku serwerów katalogów obsługujących kontrolkę LDAP na potrzeby sortowania po stronie serwera. Usługa Active Directory obsługuje kontrolkę sortowania, ale może mieć wpływ na wydajność serwera, szczególnie jeśli zestaw wyników jest duży. Należy pamiętać, że usługa Active Directory obsługuje tylko jeden klucz sortowania. Wartość domyślna to brak sortowania.
"Limit czasu" Wartość całkowita określająca limit czasu w sekundach wyszukiwania. Po osiągnięciu limitu czasu serwer przestaje wyszukiwać i zwraca skumulowane wyniki. Wartość domyślna to brak limitu czasu.
"Limit czasu" Wartość całkowita określająca wartość limitu czasu po stronie klienta w sekundach. Ta wartość wskazuje czas oczekiwania klienta na wyniki z serwera przed zatrzymaniem wyszukiwania. Wartość domyślna to brak limitu czasu.

W poniższym przykładzie kodu pokazano, jak ustawić opcje wyszukiwania.

Const ADS_SCOPE_ONELEVEL = 1
Const ADS_CHASE_REFERRALS_EXTERNAL = &H40

Dim Com As New Command
 
Com.Properties("Page Size") = 999
Com.Properties("Timeout") = 30     ' Seconds
Com.Properties("searchscope") = ADS_SCOPE_ONELEVEL
Com.Properties("Chase referrals") = ADS_CHASE_REFERRALS_EXTERNAL
Com.Properties("Cache Results") = False     ' Do not cache the result set.

Trzeci obiekt ADO jest RecordSet. Ten obiekt uzyskuje się, gdy wywołasz metodę Execute na obiekcie Polecenie. Podstawową funkcją obiektu RecordSet jest wyliczenie zestawu wyników i uzyskanie danych. Zestaw wyników może zawierać wartości atrybutów, które mają zarówno jedną, jak i wiele wartości. Pobieranie atrybutu z jedną wartością jest proste, podobnie jak pobieranie wartości kolumny w relacyjnej bazie danych, na przykład:

Fields('name').Value

Jednak uzyskanie atrybutu z wieloma wartościami jest trudniejsze. W tym przypadku Field.Value jest tablicą i należy sprawdzić dolną i górną granicę tablicy, jak pokazano w poniższym przykładzie kodu.

Set rs = Com.Execute
 
For i = 0 To rs.Fields.Count - 1
    Debug.Print rs.Fields(i).Name, rs.Fields(i).Type
Next i
 
'--------------------------
' Navigate the record set.
'--------------------------
rs.MoveFirst
lstResult.Clear      ' Clear the user interface.
While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
    ' For Multi Value attribute
    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), " # "
            lstResult.AddItem rs.Fields(i).Value(j)
        Next j
    Else
        ' For Single Value attribute.
         Debug.Print rs.Fields(i).Name, " = ", rs.Fields(i).Value
         lstResult.AddItem rs.Fields(i).Value
    End If
Next i
rs.MoveNext
Wend

Poniższy przykład kodu wyłącza konta użytkowników na serwerze LDAP.

Dim X as IADs
Dim con As New Connection, rs As New Recordset
Dim MyUser As IADsUser
 
con.Provider = "ADsDSOObject"
con.Open "Active Directory Provider", "CN=Test,CN=Users,DC=Fabrikam,DC=COM,O=INTERNET", "Password"
Set rs = con.Execute("<LDAP://MyMachine/DC=MyDomain,DC=Fabrikam,DC=com>;(objectClass=User);ADsPath;onelevel")
 
While Not rs.EOF
    ' Bind to the object to make changes 
    ' to it because ADO is currently read-only.
    MyUser = GetObject(rs.Fields(0).Value)
    MyUser.AccountDisabled = True
    MyUser.SetInfo
    rs.MoveNext
Wend

Aby uzyskać więcej informacji na temat modelu obiektów ADO, zobacz Microsoft ActiveX Data Objects.