Fonction SQLBrowseConnect

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

Résumé
SQLBrowseConnect prend en charge une méthode itérative de découverte et d’énumération des attributs et des valeurs d’attribut nécessaires pour se connecter à une source de données. Chaque appel à SQLBrowseConnect retourne des niveaux successifs d’attributs et de valeurs d’attributs. Lorsque tous les niveaux ont été énumérés, une connexion à la source de données est terminée et une chaîne de connexion complète est retournée par SQLBrowseConnect. Un code de retour SQL_SUCCESS ou SQL_SUCCESS_WITH_INFO indique que toutes les informations de connexion ont été spécifiées et que l’application est maintenant connectée à la source de données.

Syntaxe

  
SQLRETURN SQLBrowseConnect(  
     SQLHDBC         ConnectionHandle,  
     SQLCHAR *       InConnectionString,  
     SQLSMALLINT     StringLength1,  
     SQLCHAR *       OutConnectionString,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLength2Ptr);  

Arguments

ConnectionHandle
[Entrée] Handle de connexion.

InConnectionString
[Entrée] Parcourir la chaîne de connexion de la demande (voir « Argument InConnectionString » dans « Commentaires »).

StringLength1
[Entrée] Longueur de *InConnectionString en caractères.

OutConnectionString
[Sortie] Pointeur vers une mémoire tampon de caractères dans laquelle retourner la chaîne de connexion du résultat de navigation (voir « Argument OutConnectionString » dans « Commentaires »).

Si OutConnectionString a la valeur NULL, StringLength2Ptr retourne toujours le nombre total de caractères (à l’exception du caractère d’arrêt Null pour les données de caractères) pouvant être retournés dans la mémoire tampon pointée par OutConnectionString.

BufferLength
[Entrée] Longueur, en caractères, de la mémoire tampon *OutConnectionString .

StringLength2Ptr
[Sortie] Nombre total de caractères (à l’exception de l’arrêt Null) disponibles à retourner dans *OutConnectionString. Si le nombre de caractères disponibles à retourner est supérieur ou égal à BufferLength, la chaîne de connexion dans *OutConnectionString est tronquée à BufferLength moins la longueur d’un caractère d’arrêt Null.

Retours

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_ERROR, SQL_INVALID_HANDLE ou SQL_STILL_EXECUTING.

Diagnostics

Lorsque SQLBrowseConnect retourne SQL_ERROR, SQL_SUCCESS_WITH_INFO ou SQL_NEED_DATA, une valeur SQLSTATE associée peut être obtenue en appelant SQLGetDiagRec avec un HandleType de SQL_HANDLE_STMT et un Handle de ConnectionHandle. Le tableau suivant répertorie les valeurs SQLSTATE couramment retournées par SQLBrowseConnect 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.)
01004 Données de chaîne, tronquées à droite La mémoire tampon *OutConnectionString n’étant pas assez grande pour renvoyer la chaîne de connexion de résultat de navigation entière, la chaîne a été tronquée. La mémoire tampon *StringLength2Ptr contient la longueur de la chaîne de connexion de résultat de navigation non chiffrée. (La fonction retourne SQL_NEED_DATA.)
01S00 Attribut de chaîne de connexion non valide Un mot clé d’attribut non valide a été spécifié dans la chaîne de connexion de demande de navigation (InConnectionString). (La fonction retourne SQL_NEED_DATA.)

Un mot clé d’attribut a été spécifié dans la chaîne de connexion de demande de navigation (InConnectionString) qui ne s’applique pas au niveau de connexion actuel. (La fonction retourne SQL_NEED_DATA.)
01S02 Valeur modifiée Le pilote ne prend pas en charge la valeur spécifiée de l’argument ValuePtr dans SQLSetConnectAttr et remplace 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 la connexion en cours d’utilisation (DM) La connexion spécifiée avait déjà été utilisée pour établir une connexion avec une source de données, et la connexion était ouverte.
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 tentait de se connecter a échoué avant la fin du traitement de la fonction.
28000 Spécification d’autorisation non valide L’identificateur de l’utilisateur ou la chaîne d’autorisation, ou les deux, comme spécifié dans la chaîne de connexion de demande de navigation (InConnectionString), ont 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.

Le pilote 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 Une opération asynchrone a été annulée en appelant la fonction SQLCancelHandle. Ensuite, la fonction d’origine a été appelée à nouveau sur connectionHandle.

Une opération a été annulée en appelant SQLCancelHandle sur connectionHandle à partir d’un thread différent dans une application multithread.
HY010 Erreur de séquence de fonction (DM) Une fonction d’exécution asynchrone (et non celle-ci) a été appelée pour connectionHandle et était toujours en cours d’exécution 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 accessibles, 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 l’argument StringLength1 était inférieure à 0 et n’était pas égale à SQL_NTS.

(DM) La valeur spécifiée pour l’argument BufferLength était inférieure à 0.
HY114 Le pilote ne prend pas en charge l’exécution asynchrone de la fonction 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 l’opération asynchrone sur le handle de connexion.
HYT00 Délai expiré Le délai d’expiration de la connexion a expiré avant la fin de la connexion à la source de données. Le délai d’expiration est défini via SQLSetConnectAttr, SQL_ATTR_LOGIN_TIMEOUT.
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 ne réponde à la demande. Le délai d’expiration de connexion est défini via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Le pilote ne prend pas en charge cette fonction (DM) Le pilote correspondant au nom de source de données spécifié 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 la chaîne de connexion de la demande de navigation (InConnectionString) n’a pas été trouvé dans les informations système, et il n’y avait pas de spécification de pilote par défaut.

(DM) La source de données ODBC et les informations de pilote par défaut sont introuvables dans les informations système.
IM003 Impossible de charger le pilote spécifié (DM) Le pilote répertorié dans la spécification de la source de données dans les informations système ou spécifié par le mot clé DRIVER est introuvable ou n’a pas pu être chargé pour une autre raison.
IM004 Échec du SQLAllocHandle du pilote sur SQL_HANDLE _ENV (DM) Pendant SQLBrowseConnect, 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 du SQLAllocHandle du pilote sur SQL_HANDLE_DBC (DM) Pendant SQLBrowseConnect, 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 (DM) Pendant SQLBrowseConnect, le Gestionnaire de pilotes a appelé la fonction SQLSetConnectAttr du pilote et le pilote a retourné une erreur.
IM009 Impossible de charger la DLL de traduction Le pilote n’a pas pu charger la DLL de traduction spécifiée pour la source de données ou pour la connexion.
IM010 Nom de la source de données trop long (DM) La valeur d’attribut du mot clé DSN était plus longue que SQL_MAX_DSN_LENGTH caractères.
IM011 Nom du pilote trop long (DM) La valeur d’attribut du mot clé DRIVER était supérieure à 255 caractères.
IM012 Erreur de syntaxe de mot clé DRIVER (DM) La paire mot clé-valeur pour le mot clé DRIVER contenait une erreur de syntaxe.
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.
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.

InConnectionString Argument

Une chaîne de connexion de demande de navigation a la syntaxe suivante :

connection-string ::= attribute[;] | Attribut;chaîne de connexion ;
attribute ::= attribute-keyword=attribute-value | DRIVER=[{]attribute-value[}]
attribute-keyword ::= DSNPWDUID | | | driver-defined-attribute-keyword
attribute-value ::= character-string
driver-defined-attribute-keyword ::= identifier

la chaîne de caractères comporte zéro ou plusieurs caractères ; l’identificateur comporte un ou plusieurs caractères ; attribute-keyword ne respecte pas la casse ; attribute-value peut respecter la casse ; et la valeur du mot clé DSN ne se compose pas uniquement de vides. En raison de la grammaire de la chaîne de connexion et du fichier d’initialisation, des mots clés et des valeurs d’attribut qui contiennent les caractères []{}(),;? *=!@ doit être évité. En raison de la grammaire dans les informations système, les mots clés et les noms de source de données ne peuvent pas contenir la barre oblique inverse (\). Pour un ODBC 2. Pilote x , des accolades sont nécessaires autour de la valeur d’attribut pour le mot clé DRIVER.

Si des mots clés sont répétés dans la chaîne de connexion de la demande de navigation, le pilote utilise la valeur associée à la première occurrence du mot clé. Si les mots clés DSN et DRIVER sont inclus dans la même chaîne de connexion de demande de navigation, le Gestionnaire de pilotes et le pilote utilisent le mot clé qui apparaît en premier.

Pour plus d’informations sur la façon dont une application choisit une source de données ou un pilote, consultez Choix d’une source de données ou d’un pilote.

OutConnectionString Argument

La chaîne de connexion de résultat de la navigation est une liste d’attributs de connexion. Un attribut de connexion se compose d’un mot clé d’attribut et d’une valeur d’attribut correspondante. La chaîne de connexion de résultat de la navigation a la syntaxe suivante :

connection-string ::= attribute[;] | Attribut;chaîne de connexion
attribute ::= [*]attribute-keyword=attribute-value
attribute-keyword ::= ODBC-attribute-keyword | driver-defined-attribute-keyword
ODBC-attribute-keyword = {UIDPWD | }[:localized-identifier] driver-defined-attribute-keyword ::= identifier[:localized-identifier] attribute-value ::= {attribute-value-list} | ? (Les accolades sont littérales ; elles sont retournées par le pilote.)
attribute-value-list ::= character-string [:chaîne de caractères localisé] | character-string [:localized-character string] ,attribute-value-list

chaîne de caractères et chaîne de caractères localisés ont zéro ou plusieurs caractères ; identifier et localized-identifier ont un ou plusieurs caractères ; attribute-keyword ne respecte pas la casse ; et attribute-value peuvent respecter la casse. En raison de la grammaire de la chaîne de connexion et du fichier d’initialisation, des mots clés, des identificateurs localisés et des valeurs d’attribut qui contiennent les caractères []{}(),;? *=!@ doit être évité. En raison de la grammaire dans les informations système, les mots clés et les noms de source de données ne peuvent pas contenir la barre oblique inverse (\).

La syntaxe de chaîne de connexion de résultat de l’analyse est utilisée selon les règles sémantiques suivantes :

  • Si un astérisque (*) précède un attribute-keyword, l’attribut est facultatif et peut être omis lors de l’appel suivant à SQLBrowseConnect.

  • Les mots clés d’attribut UID et PWD ont la même signification que celle définie dans SQLDriverConnect.

  • Un driver-defined-attribute-keyword nomme le type d’attribut pour lequel une valeur d’attribut peut être fournie. Par exemple, il peut s’agir de SERVER, DATABASE, HOST ou SGBD.

  • ODBC-attribute-keywords et driver-defined-attribute-keywords incluent une version localisée ou conviviale du mot clé. Il peut être utilisé par les applications comme étiquette dans une boîte de dialogue. Toutefois, UID, PWD ou l’identificateur seul doivent être utilisés lors du passage d’une chaîne de demande de navigation au pilote.

  • Le {attribute-value-list} est une énumération des valeurs réelles valides pour l’attribut-mot clé correspondant. Notez que les accolades ({}) n’indiquent pas de liste de choix ; elles sont retournées par le pilote. Par exemple, il peut s’agir d’une liste de noms de serveurs ou d’une liste de noms de base de données.

  • Si l’attribut-value est un point d’interrogation unique (?), une valeur unique correspond au mot clé-attribut. Par exemple, UID=JohnS; PWD=Sésame.

  • Chaque appel à SQLBrowseConnect retourne uniquement les informations requises pour satisfaire le niveau suivant du processus de connexion. Le pilote associe les informations d’état au handle de connexion afin que le contexte puisse toujours être déterminé à chaque appel.

Utilisation de SQLBrowseConnect

SQLBrowseConnect nécessite une connexion allouée. Le Gestionnaire de pilotes charge le pilote qui a été spécifié dans ou qui correspond au nom de la source de données spécifié dans la chaîne de connexion de la demande de navigation initiale ; Pour plus d’informations sur le moment où cela se produit, consultez la section « Commentaires » dans FONCTION SQLConnect. Le pilote peut établir une connexion avec la source de données pendant le processus de navigation. Si SQLBrowseConnect retourne SQL_ERROR, les connexions en attente sont arrêtées et la connexion est retournée à un état non connecté.

Notes

SQLBrowseConnect ne prend pas en charge le regroupement de connexions. Si SQLBrowseConnect est appelé alors que le regroupement de connexions est activé, SQLSTATE HY000 (Erreur générale) est retourné.

Lorsque SQLBrowseConnect est appelé pour la première fois sur une connexion, la chaîne de connexion de la demande de navigation doit contenir le mot clé DSN ou le mot clé DRIVER . Si la chaîne de connexion de la demande de navigation contient le mot clé DSN , le Gestionnaire de pilotes localise une spécification de source de données correspondante dans les informations système :

  • Si le Gestionnaire de pilotes trouve la spécification de source de données correspondante, il charge la DLL de pilote associée ; le pilote peut récupérer des informations sur la source de données à partir des informations système.

  • Si le Gestionnaire de pilotes ne trouve pas la spécification de source de données correspondante, il localise la spécification de source de données par défaut et charge la DLL de pilote associée ; le pilote peut récupérer des informations sur la source de données par défaut à partir des informations système. « DEFAULT » est passé au pilote pour le DSN.

  • Si le Gestionnaire de pilotes ne trouve pas la spécification de source de données correspondante et qu’il n’existe aucune spécification de source de données par défaut, il retourne SQL_ERROR avec SQLSTATE IM002 (source de données introuvable et aucun pilote par défaut spécifié).

Si la chaîne de connexion de la demande de navigation contient le mot clé DRIVER , le Gestionnaire de pilotes charge le pilote spécifié ; il ne tente pas de localiser une source de données dans les informations système. Étant donné que le mot clé DRIVER n’utilise pas d’informations provenant des informations système, le pilote doit définir suffisamment de mots clés pour qu’un pilote puisse se connecter à une source de données en utilisant uniquement les informations contenues dans les chaînes de connexion de la demande de navigation.

À chaque appel à SQLBrowseConnect, l’application spécifie les valeurs d’attribut de connexion dans la chaîne de connexion de la demande de navigation. Le pilote retourne des niveaux successifs d’attributs et de valeurs d’attribut dans la chaîne de connexion du résultat de navigation ; il retourne SQL_NEED_DATA tant qu’il existe des attributs de connexion qui n’ont pas encore été énumérés dans la chaîne de connexion de la demande de navigation. L’application utilise le contenu de la chaîne de connexion de résultat de l’accès pour générer la chaîne de connexion de demande de navigation pour l’appel suivant à SQLBrowseConnect. Tous les attributs obligatoires (ceux qui ne sont pas précédés d’un astérisque dans l’argument OutConnectionString ) doivent être inclus dans l’appel suivant à SQLBrowseConnect. Notez que l’application ne peut pas utiliser le contenu des chaînes de connexion de résultat de navigation précédentes lors de la génération de la chaîne de connexion de demande de navigation actuelle ; Autrement dit, il ne peut pas spécifier des valeurs différentes pour les attributs définis dans les niveaux précédents.

Lorsque tous les niveaux de connexion et les attributs associés ont été énumérés, le pilote retourne SQL_SUCCESS, la connexion à la source de données est terminée et une chaîne de connexion complète est retournée à l’application. La chaîne de connexion peut être utilisée conjointement avec SQLDriverConnect avec l’option SQL_DRIVER_NOPROMPT pour établir une autre connexion. Toutefois, la chaîne de connexion complète ne peut pas être utilisée dans un autre appel à SQLBrowseConnect ; si SQLBrowseConnect était appelé à nouveau, l’ensemble de la séquence d’appels devrait être répété.

SQLBrowseConnect retourne également SQL_NEED_DATA s’il existe des erreurs récupérables et non fatales pendant le processus de navigation ; par exemple, un mot de passe ou un mot clé d’attribut non valide fourni par l’application. Lorsque SQL_NEED_DATA est retourné et que la chaîne de connexion du résultat de l’accès est inchangée, une erreur s’est produite et l’application peut appeler SQLGetDiagRec pour renvoyer le SQLSTATE pour les erreurs de navigation. Cela permet à l’application de corriger l’attribut et de poursuivre la navigation.

Une application peut arrêter le processus de navigation à tout moment en appelant SQLDisconnect. Le pilote arrête toutes les connexions en attente et retourne la connexion à un état non connecté.

Si les opérations asynchrones sont activées sur le handle de connexion, SQLBrowseConnect peut également retourner SQL_STILL_EXECUTING. Lorsqu’elle retourne SQL_NEED_DATA, une application doit utiliser SQLDisconnect pour annuler le processus de navigation. Si SQLBrowseConnect retourne SQL_STILL_EXECUTING, une application doit utiliser SQLCancelHandle pour annuler l’opération en cours. L’appel de SQLCancelHandle après que la fonction retourne SQL_NEED_DATA n’a aucun effet.

Pour plus d’informations, consultez Connexion avec SQLBrowseConnect.

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

Exemple de code

Notes

Si vous vous connectez à un fournisseur de source de données qui prend en charge Authentification Windows, vous devez spécifier Trusted_Connection=yes au lieu d’informations d’ID utilisateur et de mot de passe dans la chaîne de connexion.

Dans l’exemple suivant, une application appelle SQLBrowseConnect à plusieurs reprises. Chaque fois que SQLBrowseConnect retourne SQL_NEED_DATA, il transmet des informations sur les données dont il a besoin dans *OutConnectionString. L’application transmet OutConnectionString à sa routine GetUserInput (non affiché). GetUserInput analyse les informations, génère et affiche une boîte de dialogue et retourne les informations entrées par l’utilisateur dans *InConnectionString. L’application transmet les informations de l’utilisateur au pilote lors de l’appel suivant à SQLBrowseConnect. Une fois que l’application a fourni toutes les informations nécessaires pour que le pilote se connecte à la source de données, SQLBrowseConnect retourne SQL_SUCCESS et l’application continue.

Pour obtenir un exemple plus détaillé de connexion à un pilote SQL Server en appelant SQLBrowseConnect, consultez SQL Server Exemple de navigation.

Par exemple, pour se connecter à la source de données Sales, les actions suivantes peuvent se produire. Tout d’abord, l’application transmet la chaîne suivante à SQLBrowseConnect :

"DSN=Sales"  

Le Gestionnaire de pilotes charge le pilote associé à la source de données Sales. Il appelle ensuite la fonction SQLBrowseConnect du pilote avec les mêmes arguments qu’elle a reçus de l’application. Le pilote retourne la chaîne suivante dans *OutConnectionString :

"HOST:Server={red,blue,green};UID:ID=?;PWD:Password=?"  

L’application transmet cette chaîne à sa routine GetUserInput , qui génère une boîte de dialogue qui demande à l’utilisateur de sélectionner le serveur rouge, bleu ou vert et d’entrer un ID utilisateur et un mot de passe. La routine transmet les informations spécifiées par l’utilisateur suivantes dans *InConnectionString, que l’application transmet à SQLBrowseConnect :

"HOST=red;UID=Smith;PWD=Sesame"  

SQLBrowseConnect utilise ces informations pour se connecter au serveur rouge en tant que Smith avec le mot de passe Sesame, puis retourne la chaîne suivante dans *OutConnectionString :

"*DATABASE:Database={SalesEmployees,SalesGoals,SalesOrders}"  

L’application transmet cette chaîne à sa routine GetUserInput , qui génère une boîte de dialogue qui demande à l’utilisateur de sélectionner une base de données. L’utilisateur sélectionne empdata et l’application appelle SQLBrowseConnect une dernière fois avec cette chaîne :

"DATABASE=SalesOrders"  

Il s’agit de la dernière information dont le pilote a besoin pour se connecter à la source de données ; SQLBrowseConnect retourne SQL_SUCCESS, et *OutConnectionString contient la chaîne de connexion terminée :

// SQLBrowseConnect_Function.cpp  
// compile with: odbc32.lib  
#include <windows.h>  
#include <sqltypes.h>  
#include <sqlext.h>  
  
#define BRWS_LEN 100  
SQLHENV henv;  
SQLHDBC hdbc;  
SQLHSTMT hstmt;  
SQLRETURN retcode;  
SQLCHAR szConnStrIn[BRWS_LEN], szConnStrOut[BRWS_LEN];  
SQLSMALLINT cbConnStrOut;  
  
void GetUserInput(SQLCHAR * szConnStrOut, SQLCHAR * szConnStrIn) {}  
  
int main() {  
   // Allocate the environment handle.  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);        
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
  
      // Set the version environment attribute.  
      retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);  
      if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
  
         // Allocate the connection handle.  
         retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  
         if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
            // Call SQLBrowseConnect until it returns a value other than SQL_NEED_DATA   
            // (pass data source name the first time).  If SQL_NEED_DATA is returned, call GetUserInput   
            // (not shown) to build a dialog from the values in szConnStrOut.  The user-supplied values   
            // are returned in szConnStrIn, which is passed in the next call to SQLBrowseConnect.  
  
            strcpy_s((char*)szConnStrIn, _countof(szConnStrIn), "DSN=Sales");  
            do {  
               retcode = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS,  
                  szConnStrOut, BRWS_LEN, &cbConnStrOut);  
               if (retcode == SQL_NEED_DATA)  
                  GetUserInput(szConnStrOut, szConnStrIn);  
            } while (retcode == SQL_NEED_DATA);  
  
            if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){  
  
               // Allocate the statement handle.  
               retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
               if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
                  // Process data after successful connection  
                  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 de connexion SQLAllocHandle, fonction
Connexion à une source de données SQLConnect, fonction
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 des descriptions et des attributs des pilotes SQLDrivers, fonction
Libération d’un handle de connexion Fonction SQLFreeHandle

Voir aussi

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