Partager via


Fonction SQLConnect

Conformité
Version introduite : Conformité aux normes ODBC 1.0 : ISO 92

Résumé
SQLConnect établit des connexions à un pilote et à une source de données. Le handle de connexion référence le stockage de toutes les informations sur la connexion à la source de données, y compris l’état, l’état de la transaction et les informations d’erreur.

Syntaxe

  
SQLRETURN SQLConnect(  
     SQLHDBC        ConnectionHandle,  
     SQLCHAR *      ServerName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      UserName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      Authentication,  
     SQLSMALLINT    NameLength3);  

Arguments

ConnectionHandle
[Entrée] Handle de connexion.

ServerName
[Entrée] Nom de la source de données. Les données peuvent se trouver sur le même ordinateur que le programme ou sur un autre ordinateur quelque part sur un réseau. Pour plus d’informations sur la façon dont une application choisit une source de données, consultez Choix d’une source de données ou d’un pilote.

NameLength1
[Entrée] Longueur de *ServerName en caractères.

UserName
[Entrée] Identificateur d’utilisateur.

NameLength2
[Entrée] Longueur de *UserName en caractères.

Authentification
[Entrée] Chaîne d’authentification (généralement le mot de passe).

NameLength3
[Entrée] Longueur de *Authentification en caractères.

Retours

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE ou SQL_STILL_EXECUTING.

Diagnostics

Lorsque SQLConnect retourne SQL_ERROR ou SQL_SUCCESS_WITH_INFO, une valeur SQLSTATE associée peut être obtenue en appelant SQLGetDiagRec avec un HandleType de SQL_HANDLE_DBC et un handle de ConnectionHandle. Le tableau suivant répertorie les valeurs SQLSTATE généralement retournées par SQLConnect et explique chacune d’elles dans le contexte de cette fonction ; la notation « (DM) » précède les descriptions de SQLSTATEs retournées par le Gestionnaire de pilotes. Le code de retour associé à chaque valeur SQLSTATE est SQL_ERROR, sauf indication contraire.

SQLSTATE Error Description
01000 Avertissement général Message d’information spécifique au pilote. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
01S02 Valeur de l’option modifiée Le pilote n’a pas pris en charge la valeur spécifiée de l’argument ValuePtr dans SQLSetConnectAttr et a remplacé une valeur similaire. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
08001 Le client ne peut pas établir la connexion Le pilote n’a pas pu établir de connexion avec la source de données.
08002 Nom de connexion utilisé (DM) Le ConnectionHandle spécifié avait déjà été utilisé pour établir une connexion avec une source de données, et la connexion était toujours ouverte ou l’utilisateur recherchait une connexion.
08004 Le serveur a rejeté la connexion La source de données a rejeté l’établissement de la connexion pour des raisons définies par l’implémentation.
08S01 Échec de la liaison de communication Le lien de communication entre le pilote et la source de données à laquelle le pilote essayait de se connecter a échoué avant que la fonction n’ait terminé le traitement.
28000 Spécification d’autorisation non valide La valeur spécifiée pour l’argument UserName ou la valeur spécifiée pour l’argument L’authentification a violé les restrictions définies par la source de données.
HY000 Erreur générale Une erreur s’est produite pour laquelle il n’y avait pas de SQLSTATE spécifique et pour laquelle aucun SQLSTATE spécifique à l’implémentation n’a été défini. Le message d’erreur retourné par SQLGetDiagRec dans la mémoire tampon *MessageText décrit l’erreur et sa cause.
HY001 Erreur d’allocation de mémoire (DM) Le Gestionnaire de pilotes n’a pas pu allouer la mémoire nécessaire pour prendre en charge l’exécution ou l’achèvement de la fonction.
HY008 Opération annulée Le traitement asynchrone a été activé pour ConnectionHandle. La fonction SQLConnect a été appelée et, avant la fin de son exécution, la fonction SQLCancelHandle a été appelée sur connectionHandle, puis la fonction SQLConnect a été appelée à nouveau sur le ConnectionHandle.

Ou bien, la fonction SQLConnect a été appelée et, avant la fin de son exécution, SQLCancelHandle a été appelé sur connectionHandle à partir d’un autre thread dans une application multithread.
HY010 Erreur de séquence de fonction (DM) Une fonction en cours d’exécution asynchrone (et non celle-ci) a été appelée pour connectionHandle et s’exécutait toujours lorsque cette fonction a été appelée.
HY013 Erreur de gestion de la mémoire L’appel de fonction n’a pas pu être traité, car les objets de mémoire sous-jacents n’ont pas pu être consultés, peut-être en raison de conditions de mémoire insuffisantes.
HY090 Chaîne ou longueur de mémoire tampon non valide (DM) La valeur spécifiée pour les arguments NameLength1, NameLength2 ou NameLength3 était inférieure à 0, mais non égale à SQL_NTS.

(DM) La valeur spécifiée pour l’argument NameLength1 a dépassé la longueur maximale d’un nom de source de données.
HYT00 Délai expiré Le délai d’expiration de la requête a expiré avant la fin de la connexion à la source de données. La période de délai d’expiration est définie via SQLSetConnectAttr, SQL_ATTR_LOGIN_TIMEOUT.
HY114 Le pilote ne prend pas en charge l’exécution de la fonction asynchrone au niveau de la connexion (DM) L’application a activé l’opération asynchrone sur le handle de connexion avant d’établir la connexion. Toutefois, le pilote ne prend pas en charge les opérations asynchrones sur le handle de connexion.
HYT01 Délai d’attente de la connexion expiré Le délai d’expiration de la connexion a expiré avant que la source de données réponde à la demande. La période de délai d’expiration de la connexion est définie via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Le pilote ne prend pas en charge cette fonction (DM) Le pilote spécifié par le nom de la source de données ne prend pas en charge la fonction.
IM002 Source de données introuvable et aucun pilote par défaut spécifié (DM) Le nom de la source de données spécifié dans l’argument ServerName n’a pas été trouvé dans les informations système, et il n’y avait pas de spécification de pilote par défaut.
IM003 Impossible de connecter le pilote spécifié à (DM) Le pilote répertorié dans la spécification de la source de données dans les informations système est introuvable ou n’a pas pu être connecté pour une autre raison.
IM004 Échec du SQLAllocHandle du pilote sur SQL_HANDLE_ENV (DM) Pendant SQLConnect, le Gestionnaire de pilotes a appelé la fonction SQLAllocHandle du pilote avec un HandleType de SQL_HANDLE_ENV et le pilote a renvoyé une erreur.
IM005 Échec de SQLAllocHandle du pilote sur SQL_HANDLE_DBC (DM) Pendant SQLConnect, le Gestionnaire de pilotes a appelé la fonction SQLAllocHandle du pilote avec un HandleType de SQL_HANDLE_DBC et le pilote a renvoyé une erreur.
IM006 Échec de SQLSetConnectAttr du pilote Pendant SQLConnect, le Gestionnaire de pilotes a appelé la fonction SQLSetConnectAttr du pilote et le pilote a retourné une erreur. (La fonction retourne SQL_SUCCESS_WITH_INFO.)
IM009 Impossible de se connecter à la DLL de traduction Le pilote n’a pas pu se connecter à la DLL de traduction spécifiée pour la source de données.
IM010 Nom de la source de données trop long (DM) *ServerName était plus long que SQL_MAX_DSN_LENGTH caractères.
IM014 Le DSN spécifié contient une incompatibilité d’architecture entre le pilote et l’application (DM) l’application 32 bits utilise un DSN qui se connecte à un pilote 64 bits ; ou vice versa.
IM015 Échec de SQLConnect du pilote sur SQL_HANDLE_DBC_INFO_HANDLE Si un pilote retourne SQL_ERROR, le Gestionnaire de pilotes retourne SQL_ERROR à l’application et la connexion échoue.

Pour plus d’informations sur SQL_HANDLE_DBC_INFO_TOKEN, consultez Développement de la sensibilisation Connection-Pool dans un pilote ODBC.
IM017 L’interrogation est désactivée en mode de notification asynchrone Chaque fois que le modèle de notification est utilisé, l’interrogation est désactivée.
IM018 SQLCompleteAsync n’a pas été appelé pour effectuer l’opération asynchrone précédente sur ce handle. Si l’appel de fonction précédent sur le handle retourne SQL_STILL_EXECUTING et si le mode de notification est activé, SQLCompleteAsync doit être appelé sur le handle pour effectuer le post-traitement et terminer l’opération.
S1118 Le pilote ne prend pas en charge la notification asynchrone Lorsque le pilote ne prend pas en charge la notification asynchrone, vous ne pouvez pas définir SQL_ATTR_ASYNC_DBC_EVENT ou SQL_ATTR_ASYNC_DBC_RETCODE_PTR.

Commentaires

Pour plus d’informations sur la raison pour laquelle une application utilise SQLConnect, consultez Connexion à SQLConnect.

Le Gestionnaire de pilotes ne se connecte pas à un pilote tant que l’application n’appelle pas une fonction (SQLConnect, SQLDriverConnect ou SQLBrowseConnect) pour se connecter au pilote. Jusqu’à ce stade, le Gestionnaire de pilotes fonctionne avec ses propres handles et gère les informations de connexion. Lorsque l’application appelle une fonction de connexion, le Gestionnaire de pilotes vérifie si un pilote est actuellement connecté à pour le ConnectionHandle spécifié :

  • Si un pilote n’est pas connecté à, le Gestionnaire de pilotes se connecte au pilote et appelle SQLAllocHandle avec un HandleType de SQL_HANDLE_ENV, SQLAllocHandle avec un HandleType de SQL_HANDLE_DBC, SQLSetConnectAttr (si l’application a spécifié des attributs de connexion) et la fonction de connexion dans le pilote. Le Gestionnaire de pilotes retourne SQLSTATE IM006 (échec de SQLSetConnectOption du pilote) et SQL_SUCCESS_WITH_INFO pour la fonction de connexion si le pilote a retourné une erreur pour SQLSetConnectAttr. Pour plus d’informations, consultez Connexion à une source de données ou à un pilote.

  • Si le pilote spécifié est déjà connecté à sur connectionHandle, 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 pour connectionHandle conservent leurs paramètres actuels.

  • Si un autre pilote est connecté à, le Gestionnaire de pilotes appelle SQLFreeHandle avec un HandleType de SQL_HANDLE_DBC, puis, si aucun autre pilote n’est connecté dans cet environnement, il appelle SQLFreeHandle avec un HandleType de SQL_HANDLE_ENV dans le pilote connecté, puis déconnecte ce pilote. Il effectue ensuite les mêmes opérations que lorsqu’un pilote n’est pas connecté.

Le pilote alloue ensuite des handles et s’initialise lui-même.

Lorsque l’application appelle SQLDisconnect, le Gestionnaire de pilotes appelle SQLDisconnect dans le pilote. Toutefois, il ne déconnecte pas le pilote. Cela conserve le pilote en mémoire pour les applications qui se connectent à une source de données et se déconnectent à plusieurs reprises. Lorsque l’application appelle SQLFreeHandle avec un HandleType de SQL_HANDLE_DBC, le Gestionnaire de pilotes appelle SQLFreeHandle avec un HandleType de SQL_HANDLE_DBC, puis SQLFreeHandle avec un HandleType de SQL_HANDLE_ENV dans le pilote, puis déconnecte le pilote.

Une application ODBC peut établir plusieurs connexions.

Instructions du gestionnaire de pilotes

Le contenu de *ServerName affecte la façon dont le Gestionnaire de pilotes et un pilote travaillent ensemble pour établir une connexion à une source de données.

  • Si *ServerName contient un nom de source de données valide, le Gestionnaire de pilotes localise la spécification de source de données correspondante dans les informations système et se connecte au pilote associé. Le Gestionnaire de pilotes transmet chaque argument SQLConnect au pilote.

  • Si le nom de la source de données est introuvable ou si ServerName est un pointeur Null, le Gestionnaire de pilotes localise la spécification de la source de données par défaut et se connecte au pilote associé. Le Gestionnaire de pilotes transmet au pilote les arguments UserName et Authentication non modifiés, et « DEFAULT » pour l’argument ServerName .

  • Si l’argument ServerName est « DEFAULT », le Gestionnaire de pilotes localise la spécification de source de données par défaut et se connecte au pilote associé. Le Gestionnaire de pilotes transmet chaque argument SQLConnect au pilote.

  • Si le nom de la source de données est introuvable ou si ServerName est un pointeur Null et que la spécification de source de données par défaut n’existe pas, le Gestionnaire de pilotes retourne SQL_ERROR avec SQLSTATE IM002 (nom de la source de données introuvable et aucun pilote par défaut spécifié).

Une fois connecté à par le Gestionnaire de pilotes, un pilote peut localiser sa spécification de source de données correspondante dans les informations système et utiliser les informations spécifiques au pilote de la spécification pour compléter son ensemble d’informations de connexion requises.

Si une bibliothèque de traduction par défaut est spécifiée dans les informations système de la source de données, le pilote s’y connecte. Une bibliothèque de traduction différente peut être connectée en appelant SQLSetConnectAttr avec l’attribut SQL_ATTR_TRANSLATE_LIB. Vous pouvez spécifier une option de traduction en appelant SQLSetConnectAttr avec l’attribut SQL_ATTR_TRANSLATE_OPTION.

Si un pilote prend en charge SQLConnect, la section du mot clé pilote des informations système du pilote doit contenir le mot clé ConnectFunctions avec le premier caractère défini sur « Y ».

Regroupement de connexions

Le regroupement de connexions permet à une application de réutiliser une connexion qui a déjà été créée. Lorsque le regroupement de connexions est activé et que SQLConnect est appelé, le Gestionnaire de pilotes tente d’établir la connexion à l’aide d’une connexion qui fait partie d’un pool de connexions dans un environnement qui a été désigné pour le regroupement de connexions. Cet environnement est un environnement partagé qui est utilisé par toutes les applications qui utilisent les connexions dans le pool.

Le regroupement de connexions est activé avant l’allocation de l’environnement en appelant SQLSetEnvAttr pour définir SQL_ATTR_CONNECTION_POOLING sur SQL_CP_ONE_PER_DRIVER (qui spécifie un pool maximum par pilote) ou SQL_CP_ONE_PER_HENV (qui spécifie un pool maximum par environnement). DANS ce cas, SQLSetEnvAttr est appelé avec EnvironmentHandle défini sur null, ce qui fait de l’attribut un attribut au niveau du processus. Si SQL_ATTR_CONNECTION_POOLING est défini sur SQL_CP_OFF, le regroupement de connexions est désactivé.

Une fois le regroupement de connexions activé, SQLAllocHandle avec un HandleType de SQL_HANDLE_ENV est appelé pour allouer un environnement. L’environnement alloué par cet appel est un environnement partagé, car le regroupement de connexions a été activé. Toutefois, l’environnement qui sera utilisé n’est pas déterminé tant que SQLAllocHandle avec un HandleType de SQL_HANDLE_DBC n’est pas appelé.

SQLAllocHandle avec un HandleType de SQL_HANDLE_DBC est appelé pour allouer une connexion. Le Gestionnaire de pilotes tente de trouver un environnement partagé existant qui correspond aux attributs d’environnement définis par l’application. S’il n’existe aucun environnement de ce type, un environnement est créé en tant qu’environnement partagé implicite. Si un environnement partagé correspondant est trouvé, le handle d’environnement est retourné à l’application et son nombre de références est incrémenté.

Toutefois, la connexion qui sera utilisée n’est pas déterminée tant que SQLConnect n’est pas appelé. À ce stade, le Gestionnaire de pilotes tente de trouver une connexion existante dans le pool de connexions qui correspond aux critères demandés par l’application. Ces critères incluent les options de connexion demandées dans l’appel à SQLConnect (les valeurs des mots clés ServerName, UserName et Authentication ) et tous les attributs de connexion définis depuis que SQLAllocHandle avec un HandleType de SQL_HANDLE_DBC a été appelé. Le Gestionnaire de pilotes vérifie ces critères par rapport aux mots clés et attributs de connexion correspondants dans les connexions dans le pool. Si une correspondance est trouvée, la connexion dans le pool est utilisée. Si aucune correspondance n’est trouvée, une nouvelle connexion est créée.

Si l’attribut d’environnement SQL_ATTR_CP_MATCH est défini sur SQL_CP_STRICT_MATCH, la correspondance doit être exacte pour qu’une connexion dans le pool soit utilisée. Si l’attribut d’environnement SQL_ATTR_CP_MATCH est défini sur SQL_CP_RELAXED_MATCH, les options de connexion dans l’appel à SQLConnect doivent correspondre, mais tous les attributs de connexion ne doivent pas correspondre.

Les règles suivantes sont appliquées lorsqu’un attribut de connexion, tel que défini par l’application avant l’appel de SQLConnect , ne correspond pas à l’attribut de connexion de la connexion dans le pool :

  • Si l’attribut de connexion doit être défini avant d’établir la connexion :

    Si SQL_ATTR_CP_MATCH est SQL_CP_STRICT_MATCH, SQL_ATTR_PACKET_SIZE dans la connexion mise en pool doit être identique à l’attribut défini par l’application. Si SQL_CP_RELAXED_MATCH, les valeurs de SQL_ATTR_PACKET_SIZE peuvent être différentes.

    La valeur de SQL_ATTR_LOGIN_VALUE n’affecte pas la correspondance.

  • Si l’attribut de connexion peut être défini avant ou après la connexion :

    Si l’attribut de connexion n’a pas été défini par l’application, mais qu’il a été défini sur la connexion dans le pool et qu’il existe une valeur par défaut, l’attribut de connexion dans la connexion mise en pool est rétabli sur la valeur par défaut et une correspondance est déclarée. S’il n’existe aucune valeur par défaut, la connexion mise en pool n’est pas considérée comme une correspondance.

    Si l’attribut de connexion a été défini par l’application mais n’a pas été défini sur la connexion dans le pool, l’attribut de connexion sur le pool est remplacé par celui défini par l’application et une correspondance est déclarée.

    Si l’attribut de connexion a été défini par l’application et qu’il a également été défini sur la connexion dans le pool, mais que les valeurs sont différentes, la valeur de l’attribut de connexion de l’application est utilisée et une correspondance est déclarée.

  • Si les valeurs des attributs de connexion spécifiques au pilote ne sont pas identiques et que SQL_ATTR_CP_MATCH est défini sur SQL_CP_STRICT_MATCH, la connexion dans le pool n’est pas utilisée.

Lorsque l’application appelle SQLDisconnect pour se déconnecter, la connexion est retournée au pool de connexions et peut être réutilisée.

Optimisation des performances du regroupement de connexions

Lorsque des transactions distribuées sont impliquées, il est possible d’optimiser les performances de regroupement de connexions à l’aide de SQL_DTC_TRANSITION_COST, qui est un masque de bits SQLUINTEGER. Les transitions mentionnées sont les transitions de l’attribut de connexion SQL_ATTR_ENLIST_IN_DTC allant de la valeur 0 à une valeur différente de zéro, et inversement. Il s’agit d’une connexion allant de non inscrit dans une transaction distribuée à inscrit dans une transaction distribuée, et inversement. Selon la façon dont le pilote a implémenté l’inscription (définition de l’attribut de connexion SQL_ATTR_ENLIST_IN_DTC), ces transitions peuvent être coûteuses et doivent donc être évitées pour de meilleures performances.

La valeur retournée par le pilote contient n’importe quelle combinaison des bits suivants :

  • SQL_DTC_ENLIST_EXPENSIVE, lorsqu’elle est définie, implique que la transition de zéro à zéro est beaucoup plus coûteuse qu’une transition de zéro à une autre valeur différente de zéro (inscription d’une connexion précédemment inscrite dans sa transaction suivante).

  • SQL_DTC_UNENLIST_EXPENSIVE, lorsqu’il est défini, implique que la transition de zéro à zéro est beaucoup plus coûteuse que l’utilisation d’une connexion dont l’attribut SQL_ATTR_ENLIST_IN_DTC est déjà défini sur zéro.

Il existe un compromis entre l’utilisation des performances et de l’utilisation de la connexion. Si un pilote indique qu’une ou plusieurs de ces transitions sont coûteuses, le pooleur de connexions du gestionnaire de pilotes répond à cela en conservant plus de connexions dans le pool. Certaines des connexions dans le pool sont recommandées pour une utilisation non transactionnelle, et d’autres pour une utilisation transactionnelle. Toutefois, si le pilote indique que ces transitions ne sont pas coûteuses, moins de connexions peuvent être utilisées, en alternant peut-être entre l’utilisation non transactionnelle et l’utilisation transactionnelle.

Les pilotes qui ne prennent pas en charge SQL_ATTR_ENLIST_IN_DTC n’ont pas besoin de prendre en charge SQL_DTC_TRANSITION_COST. Pour les pilotes qui prennent en charge SQL_ATTR_ENLIST_IN_DTC mais pas SQL_DTC_TRANSITION_COST, il est supposé que les transitions ne sont pas coûteuses, comme si le pilote a retourné 0 (aucun bits défini) pour cette valeur.

Bien que SQL_DTC_TRANSITION_COST ait été introduit dans ODBC 3.5, un ODBC 2. Le pilote x peut également le prendre en charge, car le gestionnaire de pilotes interroge ces informations, quelle que soit la version du pilote.

Exemple de code

Dans l’exemple suivant, une application alloue des handles d’environnement et de connexion. Il se connecte ensuite à la source de données SalesOrders avec l’ID utilisateur JohnS et le mot de passe Sesame et traite les données. Une fois le traitement des données terminé, il se déconnecte de la source de données et libère les handles.

// SQLConnect_ref.cpp  
// compile with: odbc32.lib  
#include <windows.h>  
#include <sqlext.h>  
  
int main() {  
   SQLHENV henv;  
   SQLHDBC hdbc;  
   SQLHSTMT hstmt;  
   SQLRETURN retcode;  
  
   SQLCHAR * OutConnStr = (SQLCHAR * )malloc(255);  
   SQLSMALLINT * OutConnStrLen = (SQLSMALLINT *)malloc(255);  
  
   // Allocate environment handle  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
  
   // Set the ODBC version environment attribute  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
      retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);   
  
      // Allocate connection handle  
      if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
         retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
  
         // Set login timeout to 5 seconds  
         if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
            SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
  
            // Connect to data source  
            retcode = SQLConnect(hdbc, (SQLCHAR*) "NorthWind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
  
            // Allocate statement handle  
            if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
               retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);   
  
               // Process data  
               if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
                  SQLFreeHandle(SQL_HANDLE_STMT, hstmt);  
               }  
  
               SQLDisconnect(hdbc);  
            }  
  
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);  
         }  
      }  
      SQLFreeHandle(SQL_HANDLE_ENV, henv);  
   }  
}  
Pour obtenir des informations sur Consultez
Allocation d’un handle SQLAllocHandle, fonction
Découverte et énumération des valeurs requises pour se connecter à une source de données Fonction SQLBrowseConnect
Déconnexion d’une source de données SQLDisconnect, fonction
Connexion à une source de données à l’aide d’une chaîne de connexion ou d’une boîte de dialogue SQLDriverConnect, fonction
Retour du paramètre d’un attribut de connexion Fonction SQLGetConnectAttr
Définition d’un attribut de connexion Fonction SQLSetConnectAttr

Voir aussi

Informations de référence sur l’API ODBC
Fichiers d’en-tête ODBC