数据源连接

SQLConnect是最简单的连接函数。它接受三个参数:数据源名称,用户名和密码。当这三个参数包含了连接到数据库所需的全部信息时,就可以使用SQLConnect。要做到这一点,可以先通过调用SQLDataSource建立一个数据源列表,然后提示用户选择数据源名称,并输入用户名和密码,最后调用SQLConnect完成连接。

SQLConnect假设ODBC数据源内包含了ODBC驱动连接到数据库所需的全部信息(ODBC驱动应保证这一点);有了数据源名称,用户名和密码就可以连接到数据源上。SQLConnect不同于SQLDriverConnect和SQLBrowseConnect,它不使用连接字串。

下面的示例显示分配一个环境句柄和一个连接句柄,然后再使用 SQLConnect 进行连接的流程:

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
int main() {
    RETCODE retcode;
    CHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "odsn";
    CHAR szUID[MAXNAME] = "SYSDBA";
    CHAR szAuthStr[MAXNAME] = "szoscar55";
// 分配ODBC环境句柄
    retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);
// 告诉ODBC这是一个3.0标准的应用程序
    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
                            (SQLPOINTER)SQL_OV_ODBC3,
                            SQL_IS_INTEGER);
// 分配连接句柄并建立连接
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
    retcode = SQLConnect(hdbc1, (SQLCHAR*)szDSN, (SWORD)strlen(szDSN),
                        (SQLCHAR*)szUID, (SWORD)strlen(szUID),
                        (SQLCHAR*)szAuthStr, (SWORD)strlen(szAuthStr));
    if ( (retcode != SQL_SUCCESS) &&
            (retcode != SQL_SUCCESS_WITH_INFO) ) {
    // 连接失败,调用SQLGetDiagRec获取错误信息
    }
    // 分配语句句柄并执行数据库操作
    /* 数据库操作结束,清理现场*/
    SQLDisconnect(hdbc1);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);
    return(0);
}