Ricerca con OLE DB

Per entrambi i client di automazione che usano AdO (ActiveX Data Objects) e tutti i client non di automazione, ADSI fornisce un provider OLE DB che supporta un subset di interfacce di query OLE DB. Il codice client che usa già interfacce OLE DB per le query può usare le stesse interfacce per eseguire query sui servizi directory.

Nell'implementazione OLE DB un servizio directory viene esposto come oggetto Origine dati. Gli oggetti origine dati sono factory per gli oggetti sessione e supportano IDBInitialize per connettersi alla directory, IDBCreateSession per creare l'oggetto sessione, IDBProperties per fornire i dati di autenticazione allo spazio dei nomi sottostante e fornire il comando di query e IPersist per salvare i dati necessari per creare l'oggetto origine dati nel servizio directory sottostante.

Per eseguire una query di Active Directory tramite OLE DB

  1. Recuperare l'interfaccia IDBInitialize dal provider OLE DB. Nel caso di Active Directory, usare l'identificatore di classe CLSID_ADsDSOObject.
  2. Creare una matrice DBPROP di dati di connessione che specificano nome utente e password.
  3. Eseguire una query sull'interfaccia IDBInitialize recuperata nel passaggio 1 per l'interfaccia IDBProperties .
  4. Chiamare il metodo IDBProperties::SetProperties passando la matrice DBPROP creata nel passaggio 2.
  5. Chiamare il metodo IDBInitialize::Initialize per stabilire la connessione al provider OLE DB, ovvero il provider di Active Directory, in questo caso.
  6. Eseguire una query sull'interfaccia IDBInitialize per l'interfaccia IDBCreateSession .
  7. Chiamare il metodo IDBCreateSession::CreateSession che richiede una nuova interfaccia di tipo IDBCreateCommand.
  8. Chiamare il metodo IDBCreateCommand::CreateCommand per creare un'interfaccia ICommandText .
  9. Chiamare il metodo ICommandText::SetCommandText . Passare il dialetto preferito e il testo effettivo del comando di query in quel dialetto. È possibile usare DBGUID_LDAPDialect o DBGUID_DBSQL come dialetto.
  10. Chiamare ICommand::Execute. Viene restituita un'interfaccia IRowset che rappresenta l'interfaccia del set di risultati.
  11. Eseguire una query sull'interfaccia IRowset per l'interfaccia IColumnsInfo .
  12. Chiamare il metodo IColumnsInfo::GetColumnInfo per recuperare i dati delle colonne sul set di risultati.
  13. Popolare una matrice di strutture DBBINDING , descrivendo al provider OLE DB come esporre i tipi di dati in base a colonna al codice dell'applicazione. Questo passaggio consente di specificare il tipo contenuto in una determinata colonna. Inoltre, gli offset delle colonne, rispetto alla riga restituita, vengono impostati qui in base a una colonna per colonna.
  14. Eseguire una query sull'interfaccia IRowset per l'interfaccia IAccessor .
  15. Chiamare il metodo IAccessor::CreateAccessor , che restituisce una matrice di handle della funzione di accesso. Questa matrice viene quindi utilizzata per accedere alle righe del set di risultati.
  16. Chiamare IRowset::GetNextRows passando gli handle di riga e il numero di righe da ottenere.
  17. Chiamare IRowset::GetData passando un handle di riga, dal set restituito nel passaggio 16. Viene restituito un puntatore non elaborato alla riga.

Per altre informazioni sulla sintassi del filtro di ricerca, vedere sintassi del filtro di ricerca.

Per leggere i dati di riga non elaborati restituiti, usare la struttura DBBINDING creata nel passaggio 13, calcolare gli offset di colonna nel puntatore dati non elaborato restituito nel passaggio 17. Leggere la parte relativa allo stato della colonna per un risultato di recupero in tale colonna.

Per altre informazioni e un esempio di codice che illustra come eseguire ricerche in Active Directory usando il provider OLE DB ADSI, vedere Codice di esempio per l'uso di OLE DB per la ricerca in Active Directory.