Função SQLBrowseConnect

Conformidade
Versão introduzida: Conformidade de padrões do ODBC 1.0: ODBC

Resumo
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

ConnectionHandle
[Entrada] Identificador de conexão.

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

StringLength1
[Entrada] Comprimento de *InConnectionString em caracteres.

OutConnectionString
[Saída] Ponteiro para um buffer de caracteres no qual retornar a cadeia de conexão de resultado de 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 .

StringLength2Ptr
[Saída] O número total de caracteres (excluindo terminação nula) disponível para retornar em *OutConnectionString. Se o número de caracteres disponíveis para retornar 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.

Retornos

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 Identificador de ConnectionHandle. A tabela a seguir lista os valores SQLSTATE normalmente retornados por SQLBrowseConnect e explica cada um deles 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 o contrário.

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 de resultado de 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 confiável. (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 de solicitação de procura (InConnectionString). (A função retorna SQL_NEED_DATA.)

Uma palavra-chave de atributo foi especificada na cadeia de conexão de solicitação de procura (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 um valor semelhante. (A função retorna SQL_SUCCESS_WITH_INFO.)
08001 O cliente não consegue estabelecer a conexão O driver não pôde estabelecer uma conexão com a fonte de dados.
08002 Nome da conexão em uso (DM) A conexão especificada já havia sido usada para estabelecer uma conexão com uma fonte de dados e a conexã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 da função concluir 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 de solicitação de navegação (InConnectionString), violaram as restrições definidas pela fonte de dados.
HY000 Erro geral Ocorreu um erro para o qual não havia nenhum 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 pôde 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 a Função SQLCancelHandle. 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ções (DM) Uma função de execução assíncrona (não esta) foi chamada para 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 Comprimento de buffer ou cadeia de caracteres 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 Tempo limite esgotado O período de tempo limite de logon expirou antes da conexão com a fonte de dados ser 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 da fonte de dados responder à 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 dá suporte a essa 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 de 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) Não foi possível encontrar a fonte de dados ODBC e as informações padrão do driver nas informações do sistema.
IM003 Não foi possível carregar o driver especificado (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 Falha no SQLAllocHandle do driver no SQL_HANDLE _ENV (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 no SQL_HANDLE_DBC (DM) Durante 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 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 traduçã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 era maior que 255 caracteres.
IM012 Erro de sintaxe da palavra-chave DRIVER (DM) O par palavra-chave-valor da palavra-chave DRIVER continha um erro de sintaxe.
IM014 O DSN especificado contém uma incompatibilidade de arquitetura entre o Driver e o Aplicativo O aplicativo (DM) de 32 bits usa um DSN que se conecta 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:

connection-string ::= attribute[;] | Atributo;connection-string;
atributo ::= attribute-keyword=attribute-value | DRIVER=[{]attribute-value[}]
attribute-keyword ::= DSNPWDUID | | | driver-defined-attribute-keyword
attribute-value ::= character-string
driver-defined-attribute-keyword ::= identifier

em que character-string tem zero ou mais caracteres; O 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 à gramática do arquivo de inicialização e cadeia de conexão, palavras-chave e valores de atributo que contêm os caracteres []{}();? *=!@ deve ser evitado. Devido à gramática nas informações do sistema, palavras-chave e nomes de fonte de dados não podem conter o caractere de barra invertida (\). Para um ODBC 2. x driver, 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 qualquer palavra-chave exibida primeiro.

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

Argumento OutConnectionString

A cadeia de conexão de resultado de navegação é 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 de resultado de navegação tem a seguinte sintaxe:

connection-string ::= attribute[;] | Atributo;cadeia de conexão
atributo ::= [*]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} | ? (as chaves são literais; são retornadas pelo driver.)
attribute-value-list ::= character-string [:cadeia de caracteres localizada] | character-string [:localized-character string] ,attribute-value-list

em que cadeia de caracteres e cadeia de caracteres localizada têm zero ou mais caracteres; identificador e identificador localizado têm um ou mais caracteres; attribute-keyword não diferencia maiúsculas de minúsculas; e attribute-value podem diferenciar maiúsculas de minúsculas. Devido à gramática do arquivo de inicialização e cadeia de conexã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, palavras-chave e nomes de fonte de dados não podem conter o caractere de barra invertida (\).

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

  • Se um asterisco (*) preceder uma palavra-chave attribute, 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-nomeia o tipo de atributo para o qual um valor de atributo pode ser fornecido. Por exemplo, pode ser SERVER, DATABASE, HOST ou DBMS.

  • As palavras-chave 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.

  • {attribute-value-list} é uma enumeração de valores reais válidos para a palavra-chave attribute-key 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 atributo-valor for um único ponto de interrogação (?), um único valor corresponderá à palavra-chave attribute. Por exemplo, UID=JohnS; PWD=Gergelim.

  • Cada chamada para SQLBrowseConnect retorna apenas as informações necessárias para atender ao 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 especificado em 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 não conectado.

Observação

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

Quando SQLBrowseConnect é chamado pela primeira vez em uma conexão, a cadeia de conexão de solicitação de navegação deve conter a palavra-chave DSN ou a palavra-chave DRIVER . Se a cadeia de conexão procurar solicitaçã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 conseguir 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 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 procurar solicitação contiver a palavra-chave DRIVER , o Gerenciador de Driver carregará o driver especificado; ele não tenta 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 de 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 de 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 navegação; ele retorna SQL_NEED_DATA desde que haja atributos de conexão que ainda não tenham sido enumerados na cadeia de conexão de solicitação de navegação. O aplicativo usa o conteúdo da cadeia de conexão de resultado de navegação 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, ele 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 usar, 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.

SQLBrowseConnect também retornará SQL_NEED_DATA se houver erros recuperáveis e não fatales durante o processo de navegação; por exemplo, uma palavra-chave de atributo ou senha inválida fornecida pelo aplicativo. Quando SQL_NEED_DATA é retornado e a cadeia de conexão de resultado de navegação é inalterada, 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 a um estado não conectado.

Se as operações assíncronas estiverem habilitadas no identificador de conexã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 fonte de dados que dê suporte a autenticação do Windows, especifique Trusted_Connection=yes em vez de ID de usuário e informações de senha na cadeia de conexão.

No exemplo a seguir, um aplicativo chama SQLBrowseConnect repetidamente. Sempre que SQLBrowseConnect retorna SQL_NEED_DATA, ele transmite informações sobre os dados necessários em *OutConnectionString. O aplicativo passa OutConnectionString para sua rotina GetUserInput (não mostrado). GetUserInput analisa as informações, compila 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 o driver se conectar à fonte de dados, SQLBrowseConnect retornará SQL_SUCCESS e o aplicativo continuará.

Para obter um exemplo mais detalhado de conexão a um driver de SQL Server chamando SQLBrowseConnect, consulte SQL Server Exemplo de Navegação.

Por exemplo, para se conectar à fonte de dados Vendas, 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 Sesame e 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 SQLBrowseConectar uma hora final com esta cadeia de caracteres:

"DATABASE=SalesOrders"  

Esta é a última informação 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-se 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

Consulte Também

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