Partager via


Recherche avec OLE DB

Pour les clients Automation utilisant ActiveX Data Objects (ADO) et tous les clients non Automation, ADSI fournit un fournisseur OLE DB qui prend en charge un sous-ensemble d’interfaces de requête OLE DB. Le code client qui utilise déjà des interfaces OLE DB pour les requêtes peut utiliser les mêmes interfaces pour interroger les services d’annuaire.

Sous l’implémentation OLE DB, un service d’annuaire est exposé en tant qu’objet source de données. Les objets Source de données sont des fabriques pour les objets de session et prennent en charge IDBInitialize pour se connecter au répertoire, IDBCreateSession pour créer l’objet de session, IDBProperties pour fournir des données d’authentification à l’espace de noms sous-jacent et fournit la commande de requête et IPersist pour enregistrer les données nécessaires pour créer l’objet source de données dans le service d’annuaire sous-jacent.

Pour effectuer une requête Active Directory à l’aide d’OLE DB

  1. Récupérez l’interface IDBInitialize à partir du fournisseur OLE DB. Dans le cas d’Active Directory, utilisez l’identificateur de classe CLSID_ADsDSOObject.
  2. Créez un tableau DBPROP de données de connexion spécifiant le nom d’utilisateur et le mot de passe.
  3. Interrogez l’interface IDBInitialize récupérée à l’étape 1 pour l’interface IDBProperties .
  4. Appelez la méthode IDBProperties::SetProperties en passant dans le tableau DBPROP créé à l’étape 2.
  5. Appelez la méthode IDBInitialize::Initialize pour établir la connexion au fournisseur OLE DB ; il s’agit du fournisseur Active Directory, dans ce cas.
  6. Interrogez l’interface IDBInitialize pour l’interface IDBCreateSession .
  7. Appelez la méthode IDBCreateSession::CreateSession en demandant une nouvelle interface de type IDBCreateCommand.
  8. Appelez la méthode IDBCreateCommand::CreateCommand pour créer une interface ICommandText .
  9. Appelez la méthode ICommandText::SetCommandText . Transmettez le dialecte préféré et le texte de commande de requête réel dans ce dialecte. Vous pouvez utiliser DBGUID_LDAPDialect ou DBGUID_DBSQL comme dialecte.
  10. Appelez ICommand::Execute; une interface IRowset est retournée, qui est l’interface du jeu de résultats.
  11. Interrogez l’interface IRowset pour l’interface IColumnsInfo .
  12. Appelez la méthode IColumnsInfo::GetColumnInfo pour récupérer des données de colonne sur le jeu de résultats.
  13. Remplissez un tableau de structures DBBINDING , en décrivant au fournisseur OLE DB comment exposer les types de données par colonne au code de l’application. Cette étape vous permet de spécifier le TYPE contenu dans une colonne particulière. En outre, les décalages des colonnes, par rapport à la ligne retournée, sont définis ici, colonne par colonne.
  14. Interrogez l’interface IRowset pour l’interface IAccessor .
  15. Appelez la méthode IAccessor::CreateAccessor , qui retourne un tableau de handles d’accesseur. Ce tableau est ensuite utilisé pour accéder aux lignes du jeu de résultats.
  16. Appelez IRowset::GetNextRows en passant les handles de ligne et le nombre de lignes à obtenir.
  17. Appelez IRowset::GetData en passant dans un handle de ligne, à partir de l’ensemble retourné à l’étape 16. Un pointeur brut vers la ligne est retourné.

Pour plus d’informations sur la syntaxe du filtre de recherche, consultez Syntaxe du filtre de recherche.

Pour lire les données de ligne non traitées retournées, utilisez la structure DBBINDING , créée à l’étape 13, calculez les décalages de colonne dans le pointeur de données non traités retourné à l’étape 17. Lisez la partie status de la colonne pour obtenir un résultat de récupération sur cette colonne.

Pour plus d’informations et un exemple de code qui montre comment effectuer une recherche dans Active Directory à l’aide du fournisseur OLE DB ADSI, consultez Exemple de code pour l’utilisation d’OLE DB pour rechercher Active Directory.