Mappage des fonctions dans le gestionnaire de pilotes
Le gestionnaire de pilotes prend en charge deux points d’entrée pour les fonctions qui prennent des arguments de chaîne. La fonction non décorée (SQLDriverConnect) est la forme ANSI de la fonction. Le formulaire Unicode est décoré d’un W (SQLDriverConnectW.)
Le fichier d’en-tête ODBC prend également en charge les fonctions décorées avec un A (SQLDriverConnectA) pour la commodité des applications ANSI/Unicode mixtes. Les appels effectués aux fonctions A sont en fait des appels dans le point d’entrée non codé (SQLDriverConnect.)
Si l’application est compilée avec l'_UNICODE #define, le fichier d’en-tête ODBC mappe les appels de fonction non synchronisés (SQLDriverConnect) à la version Unicode (SQLDriverConnectW.)
Le Gestionnaire de pilotes reconnaît un pilote en tant que pilote Unicode si SQLConnectW est pris en charge par le pilote.
Si le pilote est un pilote Unicode, le Gestionnaire de pilotes effectue des appels de fonction comme suit :
Transmet une fonction sans arguments de chaîne ni paramètres directement au pilote.
Transmet directement les fonctions Unicode (avec le suffixe W ) au pilote.
Convertit une fonction ANSI (avec le suffixe A ) en fonction Unicode (avec le suffixe W ) en convertissant les arguments de chaîne en caractères Unicode et en transmettant la fonction Unicode au pilote.
Si le pilote est un pilote ANSI, le Gestionnaire de pilotes effectue des appels de fonction comme suit :
Transmet des fonctions sans arguments de chaîne ou paramètres directement au pilote.
Convertit les fonctions Unicode (avec le suffixe W ) en un appel de fonction ANSI et la transmet au pilote.
Transmet une fonction ANSI directement au pilote.
Le Gestionnaire de pilotes est activé en interne. Par conséquent, les performances optimales sont obtenues par une application Unicode fonctionnant avec un pilote Unicode, car le Gestionnaire de pilotes transmet simplement les fonctions Unicode au pilote. Lorsqu’une application ANSI utilise un pilote ANSI, le Gestionnaire de pilotes doit convertir des chaînes d’ANSI en Unicode lors du traitement de certaines fonctions, telles que SQLDriverConnect. Après avoir traité la fonction, le Gestionnaire de pilotes doit ensuite convertir la chaîne Unicode en ANSI avant d’envoyer la fonction au pilote ANSI.
Une application ne doit pas modifier ou lire ses tampons de paramètres liés lorsque le pilote retourne SQL_STILL_EXECUTING ou SQL_NEED_DATA. Le Gestionnaire de pilotes laisse les mémoires tampons liées à ANSI jusqu’à ce que le pilote retourne SQL_SUCCESS, SQL_SUCCESS_WITH_INFO ou SQL_ERROR. Une application multithread ne doit pas accéder aux valeurs de paramètre liées sur laquelle un autre thread exécute une instruction SQL. Le Gestionnaire de pilotes convertit les données d’Unicode en ANSI « en place », et l’autre thread peut voir les données ANSI dans ces mémoires tampons pendant que le pilote traite toujours l’instruction SQL. Les applications qui lient des données Unicode à un pilote ANSI ne doivent pas lier deux colonnes différentes à la même adresse.