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 OLE DB Abfrageschnittstellen unterstützt. Clientcode, der bereits OLE DB-Schnittstellen für Abfragen verwendet, kann dieselben Schnittstellen verwenden, um Verzeichnisdienste abfragen zu können.
Unter der OLE DB wird ein Verzeichnisdienst als Datenquellenobjekt verfügbar gemacht. Datenquellenobjekte sind Factorys für Sitzungsobjekte und unterstützen IDBInitialize zum Herstellen einer Verbindung mit dem Verzeichnis, IDBCreateSession zum Erstellen des Sitzungsobjekts, IDBProperties zum Angeben von Authentifizierungsdaten für den zugrunde liegenden Namespace sowie den Abfragebefehl und IPersist zum Speichern der Daten, die zum Erstellen des Datenquellenobjekts im zugrunde liegenden Verzeichnisdienst erforderlich sind.
So führen Sie eine Active Directory-Abfrage mit OLE DB
- Rufen Sie die IDBInitialize-Schnittstelle vom OLE DB ab. Verwenden Sie im Fall von Active Directory den Klassenbezeichner CLSID _ ADsDSOObject.
- Erstellen Sie ein DBPROP-Array von Verbindungsdaten unter Angabe von Benutzername und Kennwort.
- Fragen Sie die IDBInitialize-Schnittstelle ab, die Sie in Schritt 1 für die IDBProperties-Schnittstelle abgerufen haben.
- Rufen Sie die IDBProperties::SetProperties-Methode auf, und übergeben Sie dabei das in Schritt 2 erstellte DBPROP-Array.
- Rufen Sie die IDBInitialize::Initialize-Methode auf, um die Verbindung mit dem OLE DB herzustellen. , in diesem Fall der Active Directory-Anbieter.
- Fragen Sie die IDBInitialize-Schnittstelle für die IDBCreateSession-Schnittstelle ab.
- Rufen Sie die IDBCreateSession::CreateSession-Methode auf, und fordern Sie eine neue Schnittstelle vom Typ IDBCreateCommand an.
- Rufen Sie die IDBCreateCommand::CreateCommand-Methode auf, um eine ICommandText-Schnittstelle zu erstellen.
- Rufen Sie die ICommandText::SetCommandText-Methode auf. Übergeben Sie den bevorzugten Dialekt und den tatsächlichen Abfragebefehlstext in diesem Dialekt. Dbguid _ LDAPDialect oder DBGUID _ DBSQL kann als Dialekt verwendet werden.
- Rufen Sie ICommand::Execute auf. Eine IRowset-Schnittstelle wird zurückgegeben, die die Schnittstelle zum Resultset ist.
- Fragen Sie die IRowset-Schnittstelle für die IColumnsInfo-Schnittstelle ab.
- Rufen Sie die IColumnsInfo::GetColumnInfo-Methode auf, um Spaltendaten über das Ergebnisset abzurufen.
- Füllen Sie ein Array von DBBINDING-Strukturen auf, um dem OLE DB-Anbieter zu beschreiben, wie die Datentypen pro Spalte für den Anwendungscode verfügbar sind. Mit diesem Schritt können Sie angeben, welcher TYP in einer bestimmten Spalte enthalten ist. Auch die Offsets der Spalten relativ zur zurückgegebenen Zeile werden hier spaltenbasierte festgelegt.
- Fragen Sie die IRowset-Schnittstelle für die IAccessor-Schnittstelle ab.
- Rufen Sie die IAccessor::CreateAccessor-Methode auf, die ein Array von Accessorhandles zurückgibt. Dieses Array wird dann für den Zugriff auf die Zeilen des Resultsets verwendet.
- Rufen Sie IRowset::GetNextRows auf, indem Sie die Zeilenhandles und die Anzahl der zu erhaltenden Zeilen übergeben.
- Rufen Sie IRowset::GetData auf, indem Sie ein Zeilenhandling aus dem in Schritt 16 zurückgegebenen Satz übergeben. Ein roher 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 in Schritt 13 erstellte DBBINDING-Struktur, um die Spaltenoffsets in dem in Schritt 17 zurückgegebenen nicht verarbeiteten Datenzeiger zu berechnen. Lesen Sie den Statusteil der Spalte, um ein Abrufergebnis für diese Spalte zu erhalten.
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 active Directory-Suche.