Skip to content

如何与数据源进行连接

ODBC 连接从数据源开始,数据源是 ODBC 对一个特定的数据库连接的别称。为访问由数据源提供的数据,应用程序须先建立和数据源之间的连接,在环境句柄和连接句柄正确分配后,才能通过连接访问并管理数据。

为产生建立连接时所须的参数,须完成以下几项工作:

  • 调用 SQLAllocHandle 申请一个环境句柄。
  • 调用 SQLAllocHandle 申请一个连接句柄。
  • 创建一个数据源 DSN。
  • 一个有效的用户名。
  • 与用户名匹配的密码。
  • 提供给驱动程序的其它参数信息。

连接 ODBC 数据源时,ODBC 提供三种不同的连接函数:

  • SQLConnect。
  • SQLDriverConnect。
  • SQLBrowseConnect。

各函数都有不同的参数以及不同级别的一致性,如表1所示:

函数ODBC版本一致性主要参数
SQLConnect1.0核心级hdbc,数据源,用户ID,口令
SQLDriverConnect1.01级hdbc,窗口句柄,输入连接字符串
SQLBrowseConnect1.02级hdbc,输入连接字符串,输出连接字符串

SQLConnect 是连接 ODBC 数据源的基本方法,支持最高一致性级别。

SQLConnect 函数有以下参数:连接句柄、数据源名称、数据源名称长度、用户名(用户 ID)、用户名长度、密码以及密码长度。

SQLConnect 函数返回代码有:SQL_SUCCESS ,SQL_SUCCESS_WITH_INFO ,SQL_ERROR 或 SQL_INVALID_HANDLE 。

使用 SQLConnect 函数连接数据源的示例代码如下:

c
ret = SQLConnect(hdbc, (SQLCHAR *)"XuguDB", SQL_NTS, 
                 (SQLCHAR *)"SYSDBA", SQL_NTS, 
                 (SQLCHAR *)"SYSDBA", SQL_NTS); 
if (RC_NOTSUCCESSFUL(ret)) 
{ 
    /* 连接数据源失败! */ 
    …错误处理… 
}

SQLDriverConnect 提供了比 SQLConnect 更灵活的方法来建立 ODBC 连接。它支持以下几种连接:要求更多连接参数的数据源,对话框提示用户输入所有的连接信息以及未在系统信息表中定义的数据源。

SQLDriverConnect 提供以下连接方法:

  • 用连接字符串建立连接,此字符串包括建立连接的所有连接属性数据,如 DSN,用户名和密码,以及其他的数据库所需要的连接信息。
  • 用一个并不完整的连接字符串尝试建立连接,使 ODBC 驱动程序管理器提示用户输入所需要连接属性信息。
  • 用未在系统信息表中登记的数据源建立连接,驱动程序自动提示用户输入连接信息。
  • 用特定连接字符串建立连接,此字符串在 DSN 配置文件中确定。

SQLDriverConnect 函数 fDriverCompletion 参数说明:

  • SQL_DRIVER_PROMPT:此选项用于显示一个对话框以提示用户输入连接信息。
  • SQL_DRIVER_COMPLETE:如函数调用中包含的连接属性信息足够,ODBC尝试进行连接,否则弹出对话框提示用户输入连接信息,此时效果等同于SQL_DRIVER_PROMPT。
  • SQL_DRIVER_COMPLETE_REQUIRED:此参数属性与 SQL_DRIVER_COMPLETE 参数相似,唯一不同是用户不能改变由函数提供的信息
  • SQL_DRIVER_NOPROMPT:如函数调用时连接属性信息足够,ODBC 进行连接,否则返回 SQL_ERROR。

使用 SQLDriverConnect 连接数据源的示例代码如下:

c
SQLCHAR szConnStrIn[256] = "DSN=XuguDB;DATABASE=SYSTEM;UID=SYSDBA;PWD=SYSDBA;PORT=5138"; 
SQLCHAR szConnStrOut[256]; 
SQLSMALLINT cbConnStrOut; 
ret = SQLDriverConnect(hdbc, NULL, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut, SQL_DRIVER_NOPROMPT); 
if (RC_NOTSUCCESSFUL(ret)) 
{ 
    /* 连接数据源失败! */ 
    …错误处理… 
}

SQLBrowseConnect 函数与 SQLDriverConnect 函数相似,在调用 SQLBrowseConnect 函数情况下,程序运行时会输出一个连接字符串,可用交互方式决定连接到数据源时所需要部分信息。

使用 SQLBrowseConnect 函数连接数据源的示例代码如下:

c
SQLCHAR szConnStrIn[256] = ""; 
SQLCHAR szConnStrOut[256]; 
SQLSMALLINT cbConnStrOut; 
strcpy(szConnStrIn, "DRIVER=XuguSQL 11.2"); 
ret = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut); 
if (ret != SQL_NEED_DATA) 
{ 
    /* 连接数据源失败! */ 
    …错误处理… 
} 
strcpy(szConnStrIn, "SERVER=127.0.0.1;PORT=5138");//PORT=5138 可选 
ret = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut); 
if (ret != SQL_NEED_DATA) 
{ 
    /* 连接数据源失败! */ 
    …错误处理… 
}
strcpy(szConnStrIn, "UID=SYSDBA;PWD=SYSDBA;"); 
ret = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut); 
if (ret != SQL_SUCCESS) 
{ 
    /* 连接数据源失败! */ 
    …错误处理… 
} 
/*连接成功*/