下面的代码讲述了如何使用ODBC API的SQLBrowseConnect函数建立同数据源的连接。 
#define BRWS_LEN 100SQLHENV   
henv;SQLHDBC hdbc;  
SQLHSTMT hstmt;  
SQLRETURN retcode;  
SQLCHAR szConnStrIn[BRWS_LEN], szConnStrOut[BRWS_LEN]; 
SQLSMALLINT cbConnStrOut;/* 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, 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 the 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. */ 
lstrcpy(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); 

解决方案 »

  1.   

    下面的代码讲述了如何使用ODBC API的SQLBrowseConnect函数建立同数据源的连接。 
    #define BRWS_LEN 100SQLHENV   
    henv;SQLHDBC hdbc;  
    SQLHSTMT hstmt;  
    SQLRETURN retcode;  
    SQLCHAR szConnStrIn[BRWS_LEN], szConnStrOut[BRWS_LEN]; 
    SQLSMALLINT cbConnStrOut;/* 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, 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 the 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. */ 
    lstrcpy(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);