Função SQLBrowseConnect

Compatibilidade
Versão introduzida: ODBC 1.0 Conformidade com os padrões: ODBC

Resumo
O SQLBrowseConnect dá suporte a um método iterativo de descoberta e enumeração dos atributos e valores de atributo necessários para se conectar a uma fonte de dados. Cada chamada para SQLBrowseConnect retorna níveis sucessivos de atributos e valores de atributo. Quando todos os níveis tiverem sido enumerados, uma conexão com a fonte de dados será concluída e uma cadeia de conexão completa será retornada por SQLBrowseConnect. Um código de retorno de SQL_SUCCESS ou SQL_SUCCESS_WITH_INFO indica que todas as informações de conexão foram especificadas e o aplicativo agora está conectado à fonte de dados.

Sintaxe

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

Argumentos

Identificador de conexão
[Entrada] Identificador de conexão.

InConnectionString
[Entrada] Procure a cadeia de conexão de solicitação (consulte "Argumento InConnectionString " em "Comentários").

StringLength1
[Entrada] Comprimento de *InConnectionString em caracteres.

Cadeia de Conexão Externa
[Saída] Ponteiro para um buffer de caracteres no qual retornar a cadeia de conexão do resultado da navegação (consulte "Argumento OutConnectionString " em "Comentários").

Se OutConnectionString for NULL, StringLength2Ptr ainda retornará o número total de caracteres (excluindo o caractere de terminação nula para dados de caractere) disponíveis para retornar no buffer apontado por OutConnectionString.

BufferLength
[Entrada] Comprimento, em caracteres, do buffer *OutConnectionString .

Comprimento da cadeia de caracteres2Ptr
[Saída] O número total de caracteres (excluindo terminação nula) disponíveis para retornar em *OutConnectionString. Se o número de caracteres disponíveis para retorno for maior ou igual a BufferLength, a cadeia de conexão em *OutConnectionString será truncada para BufferLength menos o comprimento de um caractere de terminação nula.

Devoluções

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

Diagnósticos

Quando SQLBrowseConnect retorna SQL_ERROR, SQL_SUCCESS_WITH_INFO ou SQL_NEED_DATA, um valor SQLSTATE associado pode ser obtido chamando SQLGetDiagRec com um HandleType de SQL_HANDLE_STMT e um Handle de ConnectionHandle. A tabela a seguir lista os valores SQLSTATE comumente retornados por SQLBrowseConnect e explica cada um no contexto dessa função; a notação "(DM)" precede as descrições de SQLSTATEs retornadas pelo Gerenciador de Driver. O código de retorno associado a cada valor SQLSTATE é SQL_ERROR, a menos que indicado de outra forma.

SQLSTATE Erro Descrição
01000 Aviso geral Mensagem informativa específica do driver. (A função retorna SQL_SUCCESS_WITH_INFO.)
01004 Dados de cadeia de caracteres, truncados à direita O buffer *OutConnectionString não era grande o suficiente para retornar toda a cadeia de conexão do resultado da navegação, portanto, a cadeia de caracteres foi truncada. O buffer *StringLength2Ptr contém o comprimento da cadeia de conexão de resultado de navegação não truncada. (A função retorna SQL_NEED_DATA.)
01S00 Atributo de cadeia de conexão inválido Uma palavra-chave de atributo inválida foi especificada na cadeia de conexão da solicitação de navegação (InConnectionString). (A função retorna SQL_NEED_DATA.)

Uma palavra-chave de atributo foi especificada na cadeia de conexão da solicitação de navegação (InConnectionString) que não se aplica ao nível de conexão atual. (A função retorna SQL_NEED_DATA.)
01S02 Valor alterado O driver não deu suporte ao valor especificado do argumento ValuePtr em SQLSetConnectAttr e substituiu por um valor semelhante. (A função retorna SQL_SUCCESS_WITH_INFO.)
08001 O cliente não consegue estabelecer conexão O driver não conseguiu estabelecer uma conexão com a fonte de dados.
08002 Nome da conexão em uso (DM) A ligação especificada já tinha sido utilizada para estabelecer uma ligação com uma fonte de dados e a ligação estava aberta.
08004 O servidor rejeitou a conexão A fonte de dados rejeitou o estabelecimento da conexão por motivos definidos pela implementação.
08S01 Falha no link de comunicação O link de comunicação entre o driver e a fonte de dados à qual o driver estava tentando se conectar falhou antes que a função concluísse o processamento.
28000 Especificação de autorização inválida O identificador de usuário ou a cadeia de caracteres de autorização ou ambos, conforme especificado na cadeia de conexão da solicitação de navegação (InConnectionString), violou as restrições definidas pela fonte de dados.
HY000 Erro geral Ocorreu um erro para o qual não havia SQLSTATE específico e para o qual nenhum SQLSTATE específico da implementação foi definido. A mensagem de erro retornada por SQLGetDiagRec no buffer *MessageText descreve o erro e sua causa.
HY001 Erro de alocação de memória (DM) O Gerenciador de Driver não conseguiu alocar a memória necessária para dar suporte à execução ou conclusão da função.

O driver não pôde alocar a memória necessária para dar suporte à execução ou conclusão da função.
HY008 Operação cancelada Uma operação assíncrona foi cancelada chamando SQLCancelHandle Function. Em seguida, a função original foi chamada novamente no ConnectionHandle.

Uma operação foi cancelada chamando SQLCancelHandle no ConnectionHandle de um thread diferente em um aplicativo multithread.
HY010 Erro de sequência de função (DM) Uma função de execução assíncrona (não esta) foi chamada para o ConnectionHandle e ainda estava em execução quando essa função foi chamada.
HY013 Erro de gerenciamento de memória A chamada de função não pôde ser processada porque os objetos de memória subjacentes não puderam ser acessados, possivelmente devido a condições de memória baixa.
HY090 Cadeia de caracteres ou comprimento de buffer inválido (DM) O valor especificado para o argumento StringLength1 era menor que 0 e não era igual a SQL_NTS.

(DM) O valor especificado para o argumento BufferLength era menor que 0.
HY114 O driver não dá suporte à execução de função assíncrona no nível da conexão (DM) O aplicativo habilitou a operação assíncrona no identificador de conexão antes de fazer a conexão. No entanto, o driver não dá suporte à operação assíncrona no identificador de conexão.
HYT00 Timeout expired O período de tempo limite de logon expirou antes que a conexão com a fonte de dados fosse concluída. O período de tempo limite é definido por meio de SQLSetConnectAttr, SQL_ATTR_LOGIN_TIMEOUT.
HYT01 O tempo limite da conexão expirou O período de tempo limite da conexão expirou antes que a fonte de dados respondesse à solicitação. O período de tempo limite da conexão é definido por meio de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 O driver não suporta esta função (DM) O driver correspondente ao nome da fonte de dados especificado não dá suporte à função.
IM002 Fonte de dados não encontrada e nenhum driver padrão especificado (DM) O nome da fonte de dados especificado na cadeia de conexão da solicitação de navegação (InConnectionString) não foi encontrado nas informações do sistema, nem havia uma especificação de driver padrão.

(DM) A fonte de dados ODBC e as informações do driver padrão não puderam ser encontradas nas informações do sistema.
IM003 O driver especificado não pôde ser carregado (DM) O driver listado na especificação da fonte de dados nas informações do sistema ou especificado pela palavra-chave DRIVER não foi encontrado ou não pôde ser carregado por algum outro motivo.
IM004 SQLAllocHandle do driver em SQL_HANDLE _ENV falhou (DM) Durante SQLBrowseConnect, o Gerenciador de Driver chamou a função SQLAllocHandle do driver com um HandleType de SQL_HANDLE_ENV e o driver retornou um erro.
IM005 Falha no SQLAllocHandle do driver em SQL_HANDLE_DBC (DM) Durante o SQLBrowseConnect, o Gerenciador de Driver chamou a função SQLAllocHandle do driver com um HandleType de SQL_HANDLE_DBC e o driver retornou um erro.
IM006 Falha no SQLSetConnectAttr do driver (DM) Durante o SQLBrowseConnect, o Gerenciador de Driver chamou a função SQLSetConnectAttr do driver e o driver retornou um erro.
IM009 Não é possível carregar a DLL de tradução O driver não pôde carregar a DLL de conversão especificada para a fonte de dados ou para a conexão.
IM010 Nome da fonte de dados muito longo (DM) O valor do atributo para a palavra-chave DSN era maior que SQL_MAX_DSN_LENGTH caracteres.
IM011 Nome do driver muito longo (DM) O valor do atributo para a palavra-chave DRIVER tinha mais de 255 caracteres.
IM012 Erro de sintaxe de palavra-chave DRIVER (DM) O par palavra-chave-valor para a palavra-chave DRIVER continha um erro de sintaxe.
IM014 O DSN especificado contém uma incompatibilidade de arquitetura entre o driver e o aplicativo (DM) O aplicativo de 32 bits usa um DSN conectando-se a um driver de 64 bits; ou vice-versa.
IM017 A sondagem está desabilitada no modo de notificação assíncrona Sempre que o modelo de notificação é usado, a sondagem é desabilitada.
IM018 SQLCompleteAsync não foi chamado para concluir a operação assíncrona anterior nesse identificador. Se a chamada de função anterior no identificador retornar SQL_STILL_EXECUTING e se o modo de notificação estiver habilitado, SQLCompleteAsync deverá ser chamado no identificador para fazer o pós-processamento e concluir a operação.
S1118 O driver não dá suporte à notificação assíncrona Quando o driver não dá suporte à notificação assíncrona, você não pode definir SQL_ATTR_ASYNC_DBC_EVENT ou SQL_ATTR_ASYNC_DBC_RETCODE_PTR.

Argumento InConnectionString

Uma cadeia de conexão de solicitação de navegação tem a seguinte sintaxe:

cadeia de conexão ::= atributo [;] | cadeia de conexão de atributo;;
atributo ::= atributo-palavra-chave=atributo-valor | DRIVER=[{]atributo-valor[]}
palavra-chave de atributo ::=PWD | DSNUID | | palavra-chave de atributo definida pelo driver
valor do atributo ::= cadeia de caracteres
palavra-chave de atributo definida pelo driver ::= identificador

onde a cadeia de caracteres tem zero ou mais caracteres; identificador tem um ou mais caracteres; attribute-keyword não diferencia maiúsculas de minúsculas; attribute-value pode diferenciar maiúsculas de minúsculas; e o valor da palavra-chave DSN não consiste apenas em espaços em branco. Devido à cadeia de conexão e à gramática do arquivo de inicialização, palavras-chave e valores de atributo que contêm os caracteres []{}(),;? *=!@ deve ser evitado. Devido à gramática nas informações do sistema, as palavras-chave e os nomes das fontes de dados não podem conter o caractere de barra invertida (\). Para um ODBC 2.x driver, as chaves são necessárias em torno do valor do atributo para a palavra-chave DRIVER.

Se alguma palavra-chave for repetida na cadeia de conexão de solicitação de navegação, o driver usará o valor associado à primeira ocorrência da palavra-chave. Se as palavras-chave DSN e DRIVER estiverem incluídas na mesma cadeia de conexão de solicitação de navegação, o Gerenciador de Driver e o driver usarão a palavra-chave que aparecer primeiro.

Para obter informações sobre como um aplicativo escolhe uma fonte de dados ou um driver, consulte Escolhendo uma fonte de dados ou um driver.

Argumento OutConnectionString

A cadeia de conexão do resultado da procura é uma lista de atributos de conexão. Um atributo de conexão consiste em uma palavra-chave de atributo e um valor de atributo correspondente. A cadeia de conexão do resultado da navegação tem a seguinte sintaxe:

cadeia de conexão ::= atributo [;] | cadeia de conexão de atributo ;
atributo ::= [*]atributo-palavra-chave=atributo-valor
palavra-chave de atributo ::= palavra-chave de atributo ODBC palavra-chave | de atributo definida pelo driver
ODBC-attribute-keyword = {UID | PWD}[:identificador-localizado] palavra-chave-de-atributo-definido pelo driver ::= identificador[:identificador-localizado] valor-do-atributo ::= { lista } | ? de valores-de-atributo (As chaves são literais; elas são retornadas pelo driver.)
lista de valores de atributo ::= cadeia de caracteres [:cadeia de caracteres localizada] | cadeia de caracteres [:cadeia de caracteres localizada] , lista de valores de atributos

em que a cadeia de caracteres e a cadeia de caracteres localizada têm zero ou mais caracteres; identifier e localized-identifier têm um ou mais caracteres; attribute-keyword não diferencia maiúsculas de minúsculas; e attribute-value pode diferenciar maiúsculas de minúsculas. Devido à cadeia de conexão e à gramática do arquivo de inicialização, palavras-chave, identificadores localizados e valores de atributo que contêm os caracteres []{}(),;? *=!@ deve ser evitado. Devido à gramática nas informações do sistema, as palavras-chave e os nomes das fontes de dados não podem conter o caractere de barra invertida (\).

A sintaxe da cadeia de conexão do resultado da navegação é usada de acordo com as seguintes regras semânticas:

  • Se um asterisco (*) preceder uma palavra-chave de atributo, o atributo será opcional e poderá ser omitido na próxima chamada para SQLBrowseConnect.

  • As palavras-chave de atributo UID e PWD têm o mesmo significado definido em SQLDriverConnect.

  • Uma palavra-chave driver-defined-attribute-name Por exemplo, pode ser SERVER, DATABASE, HOST ou DBMS.

  • ODBC-attribute-keywords e driver-defined-attribute-keywords incluem uma versão localizada ou amigável da palavra-chave. Isso pode ser usado por aplicativos como um rótulo em uma caixa de diálogo. No entanto, UID, PWD ou o identificador sozinho devem ser usados ao passar uma cadeia de caracteres de solicitação de navegação para o driver.

  • O {attribute-value-list} é uma enumeração de valores reais válidos para a palavra-chave de atributo correspondente. Observe que as chaves ({}) não indicam uma lista de opções; elas são retornadas pelo driver. Por exemplo, pode ser uma lista de nomes de servidor ou uma lista de nomes de banco de dados.

  • Se o valor do atributo for um único ponto de interrogação (?), um único valor corresponderá à palavra-chave do atributo. Por exemplo, UID=JohnS; PWD = Gergelim.

  • Cada chamada para SQLBrowseConnect retorna apenas as informações necessárias para satisfazer o próximo nível do processo de conexão. O driver associa informações de estado ao identificador de conexão para que o contexto sempre possa ser determinado em cada chamada.

Usando SQLBrowseConnect

SQLBrowseConnect requer uma conexão alocada. O Gerenciador de Driver carrega o driver que foi especificado ou que corresponde ao nome da fonte de dados especificado na cadeia de conexão de solicitação de navegação inicial; para obter informações sobre quando isso ocorre, consulte a seção "Comentários" na função SQLConnect. O driver pode estabelecer uma conexão com a fonte de dados durante o processo de navegação. Se SQLBrowseConnect retornar SQL_ERROR, as conexões pendentes serão encerradas e a conexão será retornada a um estado desconectado.

Observação

O SQLBrowseConnect não dá suporte ao pool de conexões. Se SQLBrowseConnect for chamado enquanto o pool de conexões estiver ativado, SQLSTATE HY000 (erro geral) será retornado.

Quando SQLBrowseConnect é chamado pela primeira vez em uma conexão, a cadeia de conexão da solicitação de navegação deve conter a palavra-chave DSN ou a palavra-chave DRIVER . Se a cadeia de conexão da solicitação de navegação contiver a palavra-chave DSN , o Gerenciador de Driver localizará uma especificação de fonte de dados correspondente nas informações do sistema:

  • Se o Gerenciador de Driver encontrar a especificação de fonte de dados correspondente, ele carregará a DLL do driver associada; O driver pode recuperar informações sobre a fonte de dados das informações do sistema.

  • Se o Gerenciador de Driver não puder encontrar a especificação de fonte de dados correspondente, ele localizará a especificação de fonte de dados padrão e carregará a DLL do driver associada; O driver pode recuperar informações sobre a fonte de dados padrão das informações do sistema. "DEFAULT" é passado para o driver do DSN.

  • Se o Gerenciador de Driver não puder encontrar a especificação de fonte de dados correspondente e não houver nenhuma especificação de fonte de dados padrão, ele retornará SQL_ERROR com SQLSTATE IM002 (fonte de dados não encontrada e nenhum driver padrão especificado).

Se a cadeia de conexão de solicitação de navegação contiver a palavra-chave DRIVER , o Gerenciador de Driver carregará o driver especificado; ele não tentará localizar uma fonte de dados nas informações do sistema. Como a palavra-chave DRIVER não usa informações das informações do sistema, o driver deve definir palavras-chave suficientes para que um driver possa se conectar a uma fonte de dados usando apenas as informações nas cadeias de conexão da solicitação de navegação.

Em cada chamada para SQLBrowseConnect, o aplicativo especifica os valores de atributo de conexão na cadeia de conexão da solicitação de navegação. O driver retorna níveis sucessivos de atributos e valores de atributo na cadeia de conexão de resultado de procura; Ele retorna SQL_NEED_DATA desde que haja atributos de conexão que ainda não foram enumerados na cadeia de conexão da solicitação de navegação. O aplicativo usa o conteúdo da cadeia de conexão de resultado de procura para criar a cadeia de conexão de solicitação de navegação para a próxima chamada para SQLBrowseConnect. Todos os atributos obrigatórios (aqueles não precedidos por um asterisco no argumento OutConnectionString ) devem ser incluídos na próxima chamada para SQLBrowseConnect. Observe que o aplicativo não pode usar o conteúdo das cadeias de conexão de resultado de navegação anteriores ao criar a cadeia de conexão de solicitação de navegação atual; ou seja, não pode especificar valores diferentes para atributos definidos em níveis anteriores.

Quando todos os níveis de conexão e seus atributos associados tiverem sido enumerados, o driver retornará SQL_SUCCESS, a conexão com a fonte de dados será concluída e uma cadeia de conexão completa será retornada ao aplicativo. A cadeia de conexão é adequada para uso, em conjunto com SQLDriverConnect, com a opção SQL_DRIVER_NOPROMPT para estabelecer outra conexão. No entanto, a cadeia de conexão completa não pode ser usada em outra chamada para SQLBrowseConnect; se SQLBrowseConnect fosse chamado novamente, toda a sequência de chamadas teria que ser repetida.

O SQLBrowseConnect também retorna SQL_NEED_DATA se houver erros recuperáveis e não fatais durante o processo de navegação; por exemplo, uma palavra-chave de senha ou atributo inválida fornecida pelo aplicativo. Quando SQL_NEED_DATA é retornado e a cadeia de conexão do resultado da procura não é alterada, ocorreu um erro e o aplicativo pode chamar SQLGetDiagRec para retornar o SQLSTATE para erros de tempo de navegação. Isso permite que o aplicativo corrija o atributo e continue a navegação.

Um aplicativo pode encerrar o processo de navegação a qualquer momento chamando SQLDisconnect. O driver encerrará todas as conexões pendentes e retornará a conexão para um estado desconectado.

Se as operações assíncronas estiverem habilitadas no identificador de conexão, o SQLBrowseConnect também poderá retornar SQL_STILL_EXECUTING. Quando ele retorna SQL_NEED_DATA, um aplicativo deve usar SQLDisconnect para cancelar o processo de navegação. Se SQLBrowseConnect retornar SQL_STILL_EXECUTING, um aplicativo deverá usar SQLCancelHandle para cancelar a operação em andamento. Chamar SQLCancelHandle depois que a função retorna SQL_NEED_DATA não tem efeito.

Para obter mais informações, consulte Conectando-se com SQLBrowseConnect.

Se um driver der suporte a SQLBrowseConnect, a seção de palavra-chave driver nas informações do sistema para o driver deverá conter a palavra-chave ConnectFunctions com o terceiro caractere definido como "Y".

Exemplo de código

Observação

Se você estiver se conectando a um provedor de origem de dados compatível com autenticação do Windows, especifique Trusted_Connection=yes, em vez das informações de ID de usuário e de senha na cadeia de conexão.

No exemplo a seguir, um aplicativo chama SQLBrowseConnect repetidamente. Cada vez que o SQLBrowseConnect retorna SQL_NEED_DATA, ele retorna informações sobre os dados necessários em *OutConnectionString. O aplicativo passa OutConnectionString para sua rotina GetUserInput (não mostrada). GetUserInput analisa as informações, cria e exibe uma caixa de diálogo e retorna as informações inseridas pelo usuário em *InConnectionString. O aplicativo passa as informações do usuário para o driver na próxima chamada para SQLBrowseConnect. Depois que o aplicativo tiver fornecido todas as informações necessárias para que o driver se conecte à fonte de dados, o SQLBrowseConnect retornará SQL_SUCCESS e o aplicativo continuará.

Para obter um exemplo mais detalhado de como se conectar a um driver do SQL Server chamando SQLBrowseConnect, consulte Exemplo de navegação do SQL Server.

Por exemplo, para se conectar à fonte de dados Sales, as ações a seguir podem ocorrer. Primeiro, o aplicativo passa a seguinte cadeia de caracteres para SQLBrowseConnect:

"DSN=Sales"  

O Gerenciador de Driver carrega o driver associado à fonte de dados Sales. Em seguida, ele chama a função SQLBrowseConnect do driver com os mesmos argumentos recebidos do aplicativo. O driver retorna a seguinte cadeia de caracteres em *OutConnectionString:

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

O aplicativo passa essa cadeia de caracteres para sua rotina GetUserInput , que cria uma caixa de diálogo que solicita que o usuário selecione o servidor vermelho, azul ou verde e insira uma ID de usuário e senha. A rotina passa as seguintes informações especificadas pelo usuário de volta em *InConnectionString, que o aplicativo passa para SQLBrowseConnect:

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

SQLBrowseConnect usa essas informações para se conectar ao servidor vermelho como Smith com a senha Sésamo e, em seguida, retorna a seguinte cadeia de caracteres em *OutConnectionString:

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

O aplicativo passa essa cadeia de caracteres para sua rotina GetUserInput , que cria uma caixa de diálogo que solicita que o usuário selecione um banco de dados. O usuário seleciona empdata e o aplicativo chama SQLBrowseConnect uma última vez com esta cadeia de caracteres:

"DATABASE=SalesOrders"  

Essa é a informação final que o driver precisa para se conectar à fonte de dados; SQLBrowseConnect retorna SQL_SUCCESS e *OutConnectionString contém a cadeia de conexão concluída:

// 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);  
}  
Para obter informações sobre Consulte
Alocando um identificador de conexão Função SQLAllocHandle
Conectando a uma fonte de dados Função SQLConnect
Desconectando-se de uma fonte de dados Função SQLDisconnect
Conectando-se a uma fonte de dados usando uma cadeia de conexão ou caixa de diálogo Função SQLDriverConnect
Retornando descrições e atributos do driver Função SQLDrivers
Liberando um identificador de conexão Função SQLFreeHandle

Confira também

Referência de API do ODBC
Arquivos de cabeçalho ODBC