Partage via


Gestionnaire de pilotes

Le Gestionnaire de pilotes est une bibliothèque qui gère la communication entre les applications et les pilotes. Par exemple, sur les plateformes Microsoft Windows, le Gestionnaire de pilotes est une bibliothèque de liens dynamiques (DLL) écrite par Microsoft et qui peut être redistribuée par les utilisateurs du SDK MDAC 2.8 SP1 redistribuable.

Le Gestionnaire de pilote existe principalement pour faciliter le travail des auteurs d’applications et résout un certain nombre de problèmes communs à toutes les applications. Il s’agit notamment de déterminer quel pilote charger en fonction d’un nom de source de données, de charger et de décharger des pilotes, ainsi que d’appeler des fonctions dans les pilotes.

Pour voir pourquoi ce dernier est un problème, tenez compte de ce qui se passerait si l’application appelait directement des fonctions dans le pilote. Sauf si l’application a été liée directement à un pilote particulier, elle doit générer une table de pointeurs vers les fonctions de ce pilote et appeler ces fonctions par pointeur. L’utilisation du même code pour plusieurs pilotes à la fois ajouterait un autre niveau de complexité. L’application doit d’abord définir un pointeur de fonction pour pointer vers la fonction correcte dans le pilote correct, puis appeler la fonction via ce pointeur.

Le Gestionnaire de pilotes résout ce problème en fournissant un emplacement unique pour appeler chaque fonction. L’application est liée au Gestionnaire de pilotes et appelle des fonctions ODBC dans le Gestionnaire de pilotes, et non le pilote. L’application identifie le pilote cible et la source de données avec un handle de connexion. Lorsqu’il charge un pilote, le Gestionnaire de pilotes génère une table de pointeurs vers les fonctions de ce pilote. Il utilise le handle de connexion transmis par l’application pour rechercher l’adresse de la fonction dans le pilote cible et appelle cette fonction par adresse.

Dans la plupart des cas, le Gestionnaire de pilotes transmet simplement les appels de fonction de l’application au pilote approprié. Toutefois, il implémente également certaines fonctions (SQLDataSources, SQLDrivers et SQLGetFunctions) et effectue la vérification des erreurs de base. Par exemple, le Gestionnaire de pilotes vérifie que les handles ne sont pas des pointeurs Null, que les fonctions sont appelées dans l’ordre correct et que certains arguments de fonction sont valides. Pour obtenir une description complète des erreurs vérifiées par le Gestionnaire de pilotes, consultez la section référence de chaque fonction et annexe B : tables de transition d’état ODBC.

Le dernier rôle majeur du Gestionnaire de pilotes est le chargement et le déchargement des pilotes. L’application charge et décharge uniquement le Gestionnaire de pilotes. Quand il souhaite utiliser un pilote particulier, il appelle une fonction de connexion (SQLConnect, SQLDriverConnect ou SQLBrowseConnect) dans le Gestionnaire de pilotes et spécifie le nom d’une source de données ou d’un pilote particulier, tel que « Comptabilité » ou « SQL Server ». À l’aide de ce nom, le Gestionnaire de pilotes recherche les informations de source de données pour le nom de fichier du pilote, par exemple Sqlsrvr.dll. Il charge ensuite le pilote (en supposant qu’il n’est pas déjà chargé), stocke l’adresse de chaque fonction dans le pilote et appelle la fonction de connexion dans le pilote, qui initialise ensuite et se connecte à la source de données.

Lorsque l’application est effectuée à l’aide du pilote, elle appelle SQLDisconnect dans le Gestionnaire de pilotes. Le Gestionnaire de pilotes appelle cette fonction dans le pilote, qui se déconnecte de la source de données. Toutefois, le Gestionnaire de pilotes conserve le pilote en mémoire si l’application se reconnecte. Il décharge le pilote uniquement lorsque l’application libère la connexion utilisée par le pilote ou utilise la connexion pour un autre pilote, et aucune autre connexion n’utilise le pilote. Pour obtenir une description complète du rôle du Gestionnaire de pilotes dans le chargement et le déchargement des pilotes, consultez le rôle du Gestionnaire de pilotes dans le processus de connexion.