Partage via


Allocation d'un handle d'environnement

La première tâche de toute application ODBC consiste à charger le gestionnaire de pilotes (Driver Manager) ; la manière de procéder dépend du système d'exploitation. Par exemple, sur un ordinateur fonctionnant sous Microsoft Windows NT Server/Windows 2000 Server, Windows NT Workstation/Windows 2000 Professional ou Microsoft Windows 95/98, l'application établit un lien avec la bibliothèque du gestionnaire de pilotes ou appelle LoadLibrary pour charger la DLL du gestionnaire de pilotes.

La tâche suivante, qui doit être effectuée avant qu'une application puisse appeler toute autre fonction ODBC, consiste à initialiser l'environnement ODBC et à allouer un descripteur d'environnement, comme suit :

  1. L'application déclare une variable de type SQLHENV. Il appelle ensuite SQLAllocHandle et transfert l'adresse de cette variable et l'option SQL_HANDLE_ENV. Par exemple :

    SQLHENV henv1;  
    
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv1);  
    
  2. Le gestionnaire de pilotes alloue une structure dans laquelle sont stockées les informations relatives à l'environnement et renvoie le descripteur d'environnement dans la variable.

Le gestionnaire de pilotes n'appelle pas SQLAllocHandle dans le pilote à ce moment-là, car il ne sait pas quel pilote appeler. Il retarde l'appel de SQLAllocHandle dans le pilote jusqu'à ce que l'application appelle une fonction pour se connecter à une source de données. Pour plus d'informations, consultez la section Rôle du gestionnaire de pilotes dans le processus de connexion, plus loin dans cette section.

Une fois l'application terminée à l'aide d'ODBC, elle libère le descripteur d'environnement avec SQLFreeHandle. Après avoir libéré l'environnement, l'utilisation du descripteur de l'environnement en communication avec une fonction ODBC constitue une erreur de programmation d'application. Cette opération a des conséquences indéfinies, mais probablement fatales.

Lorsque SQLFreeHandle est appelé, le pilote libère la structure utilisée pour stocker les informations sur l'environnement. Notez que SQLFreeHandle ne peut pas être appelé pour un descripteur d'environnement tant que tous les descripteurs de connexion sur ce descripteur d'environnement n'ont pas été libérés.

Pour plus d'informations sur le descripteur d'environnement, consultez Descripteur d'environnement.