Recherche avec ActiveX Data Objects (ADO)
Le modèle ADO (ActiveX Data Object) se compose d’objets répertoriés dans le tableau suivant.
Object | Description |
---|---|
Connection | Connexion ouverte à une source de données OLE DB telle qu’ADSI. |
Commande | Définit une commande spécifique à exécuter sur la source de données. |
Paramètre | Collection facultative pour tous les paramètres à fournir à l’objet de commande. |
Recordset | Jeu d’enregistrements d’une table, d’un objet de commande ou d’une syntaxe SQL. Un recordset peut être créé sans objet de connexion sous-jacent. |
Champ | Une seule colonne de données dans un jeu d’enregistrements. |
Propriété | Collection de valeurs fournies par le fournisseur pour ADO. |
Error | Contient des données sur les erreurs d’accès aux données. Actualisé lorsqu’une erreur se produit dans une seule opération. |
Pour qu’ADO puisse communiquer avec ADSI, il doit y avoir au moins deux objets ADO : Connection et RecordSet. Ces objets ADO permettent d’authentifier les utilisateurs et d’énumérer les résultats, respectivement. En règle générale, vous allez également utiliser un objet Command pour maintenir une connexion active, spécifier des paramètres de requête, tels que la taille de la page et l’étendue de recherche, et effectuer une requête. Pour plus d’informations sur la syntaxe du filtre de recherche, consultez Syntaxe du filtre de recherche.
L’objet Connection charge le fournisseur OLE DB et valide les informations d’identification de l’utilisateur. En Visual Basic, appelez la fonction CreateObject avec « ADODB . Connection » pour créer un instance d’un objet Connection, puis définir la propriété Provider de l’objet Connection sur « ADsDSOObject ». « ADODB. Connection » est le ProgID de l’objet Connection et « ADsDSOObject » est le nom du fournisseur OLE DB dans ADSI. Si aucune information d’identification n’est spécifiée, les informations d’identification de l’utilisateur actuellement connecté sont utilisées.
L’exemple de code suivant montre comment créer un instance d’un objet Connection.
Set con = CreateObject("ADODB.Connection")
con.Provider = "ADsDSOObject"
L’exemple de code suivant montre comment créer un instance d’un objet Connection.
<%
Set con = Server.CreateObject("ADODB.Connection")
con.Provider = "ADsDSOObject"
%>
L’exemple de code suivant montre comment créer un instance d’un objet Connection. N’oubliez pas que vous devez inclure la bibliothèque de types ADO (msadoXX.dll) comme l’une des références dans le projet Visual Basic.
Dim Con As New Connection
con.Provider = "ADsDSOObject"
Spécifiez les données d’authentification utilisateur en définissant les propriétés de l’objet Connection . Le tableau suivant répertorie les propriétés d’authentification utilisateur prises en charge par ADSI.
Propriété | Description |
---|---|
« ID utilisateur » | Chaîne qui identifie l’utilisateur dont le contexte de sécurité est utilisé lors de la recherche. Pour plus d’informations sur le format de la chaîne de nom d’utilisateur, consultez IADsOpenDSObject::OpenDSObject. S’il n’est pas spécifié, la valeur par défaut est l’utilisateur connecté ou l’utilisateur qui emprunte l’identité du processus appelant. |
« Mot de passe » | Chaîne qui spécifie le mot de passe de l’utilisateur identifié par « ID d’utilisateur ». |
« Chiffrer le mot de passe » | Valeur booléenne qui spécifie si le mot de passe est chiffré. La valeur par défaut est false. |
« Indicateur ADSI » | Ensemble d’indicateurs de l’énumération ADS_AUTHENTICATION_ENUM qui spécifient les options d’authentification de liaison. La valeur par défaut est zéro. |
L’exemple de code suivant montre comment les propriétés sont définies avant de créer l’objet Command .
Set oConnect = CreateObject("ADODB.Connection")
oConnect.Provider = "ADsDSOObject"
oConnect.Properties("User ID") = stUser
oConnect.Properties("Password") = stPass
oConnect.Properties("Encrypt Password") = True
oConnect.Open "DS Query", stUser, stPass
Le deuxième objet ADO est l’objet Command . Le ProgID de l’objet Command est « ADODB . Commande ». Cet objet vous permet d’émettre des instructions de requête et d’autres commandes vers ADSI à l’aide de la connexion active. L’objet Command utilise sa propriété ActiveConnection pour maintenir une connexion active. Il gère également la propriété CommandText pour contenir les instructions de requête émises par un utilisateur. Les instructions de requête sont exprimées dans le dialecte SQL ou le dialecte LDAP.
Les exemples de code suivants montrent comment créer un objet Command .
Set command = CreateObject("ADODB.Command")
Set command.ActiveConnection = oConnect
command.CommandText =
"SELECT AdsPath, cn FROM 'LDAP://DC=Fabrikam,DC=com' WHERE objectClass = '*'"
Dans l’exemple de code suivant, incluez la bibliothèque de types ADO (msadoXX.dll) comme l’une des références.
Dim command As New Command
Set command.ActiveConnection = oConnect
command.CommandText = "<LDAP://DC=Fabrikam,DC=com>;(objectClass=*);AdsPath, cn; subTree"
Les options de recherche de l’objet Command sont spécifiées en définissant la propriété Properties . Le tableau suivant répertorie les propriétés nommées acceptables pour Properties.
Propriété nommée | Description |
---|---|
« Asynchrone » | Valeur booléenne qui spécifie si la recherche est synchrone ou asynchrone. La valeur par défaut est False (synchrone). Une recherche synchrone bloque jusqu’à ce que le serveur retourne l’intégralité du résultat ou, pour une recherche paginée, la page entière. Une recherche asynchrone bloque jusqu’à ce qu’une ligne des résultats de la recherche soit disponible, ou jusqu’à ce que l’heure spécifiée par la propriété « Délai d’expiration » s’écoule. |
« Résultats du cache » | Valeur booléenne qui spécifie si le résultat doit être mis en cache côté client. La valeur par défaut est true ; ADSI met en cache le jeu de résultats. La désactivation de cette option peut être souhaitable pour les jeux de résultats volumineux. |
« Références chase » | Valeur du ADS_CHASE_REFERRALS_ENUM qui spécifie la façon dont la recherche recherche recherche les références. La valeur par défaut est ADS_CHASE_REFERRALS_NEVER. Pour plus d’informations sur cette propriété, consultez Références. |
« Noms de colonnes uniquement » | Valeur booléenne qui indique que la recherche doit récupérer uniquement le nom des attributs auxquels des valeurs ont été attribuées. La valeur par défaut est false. |
« Alias deref » | Valeur booléenne qui spécifie si les alias d’objets trouvés sont résolus. La valeur par défaut est false. |
« Taille de page » | Valeur entière qui active la pagination et spécifie le nombre maximal d’objets à retourner dans un jeu de résultats. La valeur par défaut est aucune taille de page. Pour plus d’informations, consultez Récupération de jeux de résultats volumineux. |
« SearchScope » | Valeur de l’énumération ADS_SCOPEENUM qui spécifie l’étendue de recherche. La valeur par défaut est ADS_SCOPE_SUBTREE. |
« Limite de taille » | Valeur entière qui spécifie la limite de taille pour la recherche. Pour Active Directory, la limite de taille spécifie le nombre maximal d’objets retournés. Le serveur arrête la recherche lorsque la limite de taille est atteinte et retourne les résultats accumulés. La valeur par défaut est sans limite. |
« Trier sur » | Chaîne qui spécifie une liste d’attributs séparés par des virgules à utiliser comme clés de tri. Cette propriété fonctionne uniquement pour les serveurs d’annuaire qui prennent en charge le contrôle LDAP pour le tri côté serveur. Active Directory prend en charge le contrôle de tri, mais il peut avoir un impact sur les performances du serveur, en particulier si le jeu de résultats est volumineux. N’oubliez pas qu’Active Directory ne prend en charge qu’une seule clé de tri. La valeur par défaut n’est pas de tri. |
« Limite de temps » | Valeur entière qui spécifie la limite de temps, en secondes, pour la recherche. Lorsque la limite de temps est atteinte, le serveur arrête la recherche et retourne les résultats accumulés. La valeur par défaut n’est pas limitée dans le temps. |
« Délai d’expiration » | Valeur entière qui spécifie la valeur de délai d’expiration côté client, en secondes. Cette valeur indique l’heure à laquelle le client attend les résultats du serveur avant d’arrêter la recherche. La valeur par défaut n’est pas le délai d’attente. |
L’exemple de code suivant montre comment définir les options de recherche.
Const ADS_SCOPE_ONELEVEL = 1
Const ADS_CHASE_REFERRALS_EXTERNAL = &H40
Dim Com As New Command
Com.Properties("Page Size") = 999
Com.Properties("Timeout") = 30 ' Seconds
Com.Properties("searchscope") = ADS_SCOPE_ONELEVEL
Com.Properties("Chase referrals") = ADS_CHASE_REFERRALS_EXTERNAL
Com.Properties("Cache Results") = False ' Do not cache the result set.
Le troisième objet ADO est RecordSet. Vous obtenez cet objet lorsque vous appelez la méthode Execute sur un objet Command . La fonction principale de l’objet RecordSet est d’énumérer le jeu de résultats et d’obtenir les données. Le jeu de résultats peut contenir des valeurs pour les attributs qui ont des valeurs uniques ou multiples. L’obtention d’un attribut à valeur unique est simple, similaire à l’obtention de la valeur de colonne dans la base de données relationnelle, par exemple :
Fields('name').Value
Toutefois, l’obtention d’un attribut avec plusieurs valeurs est plus difficile. Dans ce cas, Field.Value est un tableau et vous devez case activée la limite inférieure et supérieure du tableau, comme illustré dans l’exemple de code suivant.
Set rs = Com.Execute
For i = 0 To rs.Fields.Count - 1
Debug.Print rs.Fields(i).Name, rs.Fields(i).Type
Next i
'--------------------------
' Navigate the record set.
'--------------------------
rs.MoveFirst
lstResult.Clear ' Clear the user interface.
While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
' For Multi Value attribute
If rs.Fields(i).Type = adVariant And Not (IsNull(rs.Fields(i).Value)) Then
Debug.Print rs.Fields(i).Name, " = "
For j = LBound(rs.Fields(i).Value) To UBound(rs.Fields(i).Value)
Debug.Print rs.Fields(i).Value(j), " # "
lstResult.AddItem rs.Fields(i).Value(j)
Next j
Else
' For Single Value attribute.
Debug.Print rs.Fields(i).Name, " = ", rs.Fields(i).Value
lstResult.AddItem rs.Fields(i).Value
End If
Next i
rs.MoveNext
Wend
L’exemple de code suivant désactive les comptes d’utilisateur sur un serveur LDAP.
Dim X as IADs
Dim con As New Connection, rs As New Recordset
Dim MyUser As IADsUser
con.Provider = "ADsDSOObject"
con.Open "Active Directory Provider", "CN=Test,CN=Users,DC=Fabrikam,DC=COM,O=INTERNET", "Password"
Set rs = con.Execute("<LDAP://MyMachine/DC=MyDomain,DC=Fabrikam,DC=com>;(objectClass=User);ADsPath;onelevel")
While Not rs.EOF
' Bind to the object to make changes
' to it because ADO is currently read-only.
MyUser = GetObject(rs.Fields(0).Value)
MyUser.AccountDisabled = True
MyUser.SetInfo
rs.MoveNext
Wend
Pour plus d’informations sur le modèle objet ADO, consultez Microsoft ActiveX Data Objects.