Partager via


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 (SQLDriver Connecter) est la forme ANSI de la fonction. Le formulaire Unicode est décoré d’un W (SQLDriver Connecter W.)

Le fichier d’en-tête ODBC prend également en charge les fonctions décorées avec un A (SQLDriver Connecter A) 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 noté (SQLDriver Connecter.)

Si l’application est compilée avec le _UNICODE #define, le fichier d’en-tête ODBC mappe les appels de fonction non synchronisés (SQLDriver Connecter) à la version Unicode (SQLDriver Connecter W.)

Le Gestionnaire de pilotes reconnaît un pilote en tant que pilote Unicode si SQL Connecter W 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 SQLDriver Connecter. 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 à des 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.