Suchen mit OLE DB

Für Automatisierungsclients, die ActiveX Data Objects (ADO) und alle Nichtautomatisierungsclients verwenden, 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 die gleichen Schnittstellen zum Abfragen von Verzeichnisdiensten verwenden.

Unter der OLE DB-Implementierung wird ein Verzeichnisdienst als Datenquellenobjekt verfügbar gemacht. Datenquellenobjekte sind Fabriken für Sitzungsobjekte und unterstützen IDBInitialize , um eine Verbindung mit dem Verzeichnis herzustellen, IDBCreateSession zum Erstellen des Sitzungsobjekts, IDBProperties , um Authentifizierungsdaten an den zugrunde liegenden Namespace bereitzustellen und den Abfragebefehl und IPersist bereitzustellen, um die zum Erstellen des Datenquellenobjekts erforderlichen Daten im zugrunde liegenden Verzeichnisdienst zu speichern.

So führen Sie eine Active Directory-Abfrage mit 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, die Benutzernamen und Kennwort angeben.
  3. Abfragen der IDBInitialize-Schnittstelle , die in Schritt 1 für die IDBProperties-Schnittstelle abgerufen wurde.
  4. Rufen Sie die IDBProperties::SetProperties-Methode auf, die im in Schritt 2 erstellten DBPROP-Array übergeben wird.
  5. Rufen Sie die IDBInitialize::Initialize-Methode auf, um die Verbindung mit dem OLE DB-Anbieter herzustellen; das ist der Active Directory-Anbieter in diesem Fall.
  6. Abfragen der IDBInitialize-Schnittstelle für die IDBCreateSession-Schnittstelle .
  7. Rufen Sie die IDBCreateSession::CreateSession-Methode auf, die eine neue Schnittstelle vom Typ IDBCreateCommand anfordert.
  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. Entweder DBGUID_LDAPDialect oder DBGUID_DBSQL können als Dialekt verwendet werden.
  10. Aufrufen von ICommand::Execute; Eine IRowset-Schnittstelle wird zurückgegeben, was die Schnittstelle zum Resultset ist.
  11. Abfragen der IRowset-Schnittstelle für die IColumnsInfo-Schnittstelle .
  12. Rufen Sie die IColumnsInfo::GetColumnInfo-Methode auf, um Spaltendaten zum Resultset abzurufen.
  13. Füllen Sie ein Array von DBBINDING-Strukturen auf, das den OLE DB-Anbieter beschreibt, wie die Datentypen pro Spalte für den Anwendungscode verfügbar gemacht werden. Mit diesem Schritt können Sie angeben, welche TYPE in einer bestimmten Spalte enthalten ist. Auch die Offsets der Spalten, relativ zur zurückgegebenen Zeile, werden hier auf Spalten-nach-Spalten-Basis festgelegt.
  14. Abfragen der IRowset-Schnittstelle für die IAccessor-Schnittstelle .
  15. Rufen Sie die IAccessor::CreateAccessor-Methode auf, die ein Array von Accessor-Handlen zurückgibt. Dieses Array wird dann verwendet, um auf die Zeilen des Resultsets zuzugreifen.
  16. Rufen Sie IRowset::GetNextRows auf, die die Zeilenziehpunkte übergeben, und die Anzahl der zeilen, die abgerufen werden sollen.
  17. Rufen Sie IRowset::GetData auf, der in Schritt 16 zurückgegeben wird. Ein unformatierter Zeiger auf die Zeile wird zurückgegeben.

Weitere Informationen zur Suchfiltersyntax finden Sie unter Suchfiltersyntax.

Zum Lesen der zurückgegebenen nicht verarbeiteten Zeilendaten verwenden Sie die in Schritt 13 erstellte DBBINDING-Struktur , berechnen Sie die Spaltenversatzungen im in Schritt 17 zurückgegebenen Datenzeiger. Lesen Sie den Statusteil der Spalte für ein Abrufergebnis in dieser Spalte.

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