Suchen mit OLE DB

Sowohl für Automation-Clients, die ActiveX Data Objects (ADO) verwenden, als auch für alle Nicht-Automation-Clients stellt ADSI einen OLE DB-Anbieter bereit, der eine Teilmenge von OLE DB-Abfrageschnittstellen unterstützt. Clientcode, der bereits OLE DB-Schnittstellen für Abfragen verwendet, kann dieselben Schnittstellen verwenden, um Verzeichnisdienste abzufragen.

Unter der OLE DB-Implementierung wird ein Verzeichnisdienst als Datenquellenobjekt verfügbar gemacht. Datenquellenobjekte sind Fabriken für Sitzungsobjekte und unterstützen IDBInitialize zum Herstellen einer Verbindung mit dem Verzeichnis, IDBCreateSession zum Erstellen des Sitzungsobjekts, IDBProperties zum Bereitstellen von Authentifizierungsdaten an den zugrunde liegenden Namespace und bereitstellen den Abfragebefehl und IPersist zum Speichern der zum Erstellen des Datenquellenobjekts erforderlichen Daten im zugrunde liegenden Verzeichnisdienst.

So führen Sie eine Active Directory-Abfrage mithilfe von OLE DB aus

  1. Rufen Sie die IDBInitialize-Schnittstelle vom OLE DB-Anbieter ab. Verwenden Sie im Fall von Active Directory den Klassenbezeichner CLSID_ADsDSOObject.
  2. Erstellen Sie ein DBPROP-Array mit Verbindungsdaten unter Angabe von Benutzername und Kennwort.
  3. Fragen Sie die IDBInitialize-Schnittstelle ab, die in Schritt 1 für die IDBProperties-Schnittstelle abgerufen wurde.
  4. Rufen Sie die IDBProperties::SetProperties-Methode auf, die das in Schritt 2 erstellte DBPROP-Array übergibt.
  5. Rufen Sie die IDBInitialize::Initialize-Methode auf, um die Verbindung mit dem OLE DB-Anbieter herzustellen. das ist in diesem Fall der Active Directory-Anbieter.
  6. Fragen Sie die IDBInitialize-Schnittstelle für die IDBCreateSession-Schnittstelle ab.
  7. Rufen Sie die IDBCreateSession::CreateSession-Methode auf, um eine neue Schnittstelle vom Typ IDBCreateCommand anzufordern.
  8. Rufen Sie die IDBCreateCommand::CreateCommand-Methode auf, um eine ICommandText-Schnittstelle zu erstellen.
  9. Rufen Sie die ICommandText::SetCommandText-Methode auf. Übergeben Sie den bevorzugten Dialekt und den tatsächlichen Abfragebefehlstext in diesem Dialekt. Als Dialekt kann entweder DBGUID_LDAPDialect oder DBGUID_DBSQL verwendet werden.
  10. Rufen Sie ICommand::Execute; Es wird eine IRowset-Schnittstelle zurückgegeben, die die Schnittstelle zum Resultset darstellt.
  11. Fragen Sie die IRowset-Schnittstelle für die IColumnsInfo-Schnittstelle ab.
  12. Rufen Sie die IColumnsInfo::GetColumnInfo-Methode auf, um Spaltendaten zum Resultset abzurufen.
  13. Füllen Sie ein Array von DBBINDING-Strukturen auf, und beschreiben Sie dem OLE DB-Anbieter, wie die Datentypen pro Spalte für den Anwendungscode verfügbar gemacht werden. In diesem Schritt können Sie angeben, welcher TYP in einer bestimmten Spalte enthalten ist. Außerdem werden die Offsets der Spalten relativ zur zurückgegebenen Zeile hier spaltenweise festgelegt.
  14. Fragen Sie die IRowset-Schnittstelle für die IAccessor-Schnittstelle ab.
  15. Rufen Sie die IAccessor::CreateAccessor-Methode auf, die ein Array von Accessorhandles zurückgibt. Dieses Array wird dann verwendet, um auf die Zeilen des Resultsets zuzugreifen.
  16. Rufen Sie IRowset::GetNextRows auf, um die Zeilenhandles und die Anzahl der abzurufenden Zeilen zu übergeben.
  17. Rufen Sie IRowset::GetData in einem Zeilenhandle aus dem in Schritt 16 zurückgegebenen Satz auf. Ein unformatierter Zeiger auf die Zeile wird zurückgegeben.

Weitere Informationen zur Suchfiltersyntax finden Sie unter Suchfiltersyntax.

Verwenden Sie zum Lesen der zurückgegebenen nicht verarbeiteten Zeilendaten die DBBINDING-Struktur , die in Schritt 13 erstellt wurde, und berechnen Sie die Spaltenoffsets im nicht verarbeiteten Datenzeiger, der in Schritt 17 zurückgegeben wird. Lesen Sie den status Teil der Spalte für ein Abrufergebnis für diese Spalte.

Weitere Informationen und ein Codebeispiel, das zeigt, wie Active Directory mithilfe des ADSI OLE DB-Anbieters durchsucht wird, finden Sie unter Beispielcode für die Verwendung von OLE DB zum Durchsuchen von Active Directory.