Rôle du gestionnaire de pilotes dans le processus de connexion
N’oubliez pas que les applications n’appellent pas directement les fonctions de pilote. Au lieu de cela, ils appellent des fonctions Driver Manager portant le même nom et le Gestionnaire de pilotes appelle les fonctions de pilote. En règle générale, cela se produit presque immédiatement. Par exemple, l’application appelle SQLExecute dans le Gestionnaire de pilotes et après quelques case activée d’erreur, le Gestionnaire de pilotes appelle SQLExecute dans le pilote.
Le processus de connexion est différent. Lorsque l’application appelle SQLAllocHandle avec les options SQL_HANDLE_ENV et SQL_HANDLE_DBC, la fonction alloue des handles uniquement dans le Gestionnaire de pilotes. Le Gestionnaire de pilotes n’appelle pas cette fonction dans le pilote, car il ne sait pas quel pilote appeler. De même, si l’application transmet le handle d’une connexion non connectée à SQLSet Connecter Attr ou SQLGet Connecter Attr, seul le Gestionnaire de pilotes exécute la fonction. Il stocke ou obtient la valeur d’attribut de son handle de connexion et retourne SQLSTATE 08003 (Connecter ion non ouverte) lors de l’obtention d’une valeur pour un attribut qui n’a pas été défini et pour lequel ODBC ne définit pas de valeur par défaut.
Lorsque l’application appelle SQL Connecter, SQLDriver Connecter ou SQLBrowse Connecter, le Gestionnaire de pilotes détermine d’abord quel pilote utiliser. Il case activée ensuite de déterminer si un pilote est actuellement chargé sur la connexion :
Si aucun pilote n’est chargé sur la connexion, le Gestionnaire de pilotes case activée si le pilote spécifié est chargé sur une autre connexion dans le même environnement. Si ce n’est pas le cas, le Gestionnaire de pilotes charge le pilote sur la connexion et appelle SQLAllocHandle dans le pilote avec l’option SQL_HANDLE_ENV.
Le Gestionnaire de pilotes appelle ensuite SQLAllocHandle dans le pilote avec l’option SQL_HANDLE_DBC, qu’il soit ou non chargé. Si l’application définit des attributs de connexion, le Gestionnaire de pilotes appelle SQLSet Connecter Attr dans le pilote ; si une erreur se produit, la fonction de connexion du Gestionnaire de pilotes retourne SQLSTATE IM006 (SQLSet du pilote Connecter Attr a échoué). Enfin, le Gestionnaire de pilotes appelle la fonction de connexion dans le pilote.
Si le pilote spécifié est chargé sur la connexion, le Gestionnaire de pilotes appelle uniquement la fonction de connexion dans le pilote. Dans ce cas, le pilote doit s’assurer que tous les attributs de connexion sur la connexion conservent leurs paramètres actuels.
Si un autre pilote est chargé sur la connexion, le Gestionnaire de pilotes appelle SQLFreeHandle dans le pilote pour libérer la connexion. S’il n’existe aucune autre connexion qui utilise le pilote, le Gestionnaire de pilotes appelle SQLFreeHandle dans le pilote pour libérer l’environnement et décharge le pilote. Le Gestionnaire de pilotes effectue ensuite les mêmes opérations que lorsqu’un pilote n’est pas chargé sur la connexion.
Le Gestionnaire de pilotes verrouille le handle d’environnement (henv) avant d’appeler SQLAllocHandle et SQLFreeHandle d’un pilote lorsque HandleType est défini sur SQL_HANDLE_DBC.
Lorsque l’application appelle SQLDisconnect, le Gestionnaire de pilotes appelle SQLDisconnect dans le pilote. Toutefois, il laisse le pilote chargé au cas où l’application se reconnecte au pilote. Lorsque l’application appelle SQLFreeHandle avec l’option SQL_HANDLE_DBC, le Gestionnaire de pilotes appelle SQLFreeHandle dans le pilote. Si le pilote n’est utilisé par aucune autre connexion, le Gestionnaire de pilotes appelle ensuite SQLFreeHandle dans le pilote avec l’option SQL_HANDLE_ENV et décharge le pilote.