如何与数据源进行连接
ODBC 的连接是从数据源开始的,数据源是 ODBC 对一个特定的数据库的别称。为了
访问由数据源提供的数据,你的程序中必须首先建立和数据源之间的连接,在环境和连接句
柄正确分配之后,才能通过这些连接管理数据访问。
为了产生建立连接时必要的参数,必须完成以下的几项工作:
1. 调用 SQLAllocHandle 申请一个环境句柄;
2. 调用 SQLAllocHandle 申请一个连接句柄;
3. 创建一个数据源 DSN;
4. 一个有效的用户 ID;
5. 一个对应于这个用户 ID 的口令;
6. 其它的一些提供给驱动程序的参数信息。
连 接 ODBC 数 据 源 时 , ODBC 提 供 三 种 不 同 的 连 接 函 数 , 即 SQLConnect 、
SQLDriverConnect 和 SQLBrowseConnect,每个函数都有不同的参数以及不同级别的一致性,
如表 3.2 所示:
ODBC 版本 |
一致性 |
主要参数 |
|
SQLConnect |
1.0 |
核心级 |
hdbc,数据源,用户 ID,口令 |
SQLDriverConnect |
1.0 |
1 级 |
hdbc,窗口句柄,输入连接字符串 |
SQLBrowseConnect |
1.0 |
2 级 |
hdbc,输入连接字符串,输出连接字符串 |
SQLConnect 是连接 ODBC 数据源的最基本的方法,在所有的一致性级别上都支持。
SQLConnect 函数有以下参数:连接句柄、数据源名称、数据源名称长度、用户名(用户 ID)、
用 户 名 长 度 、 用 户 口 令 以 及 口 令 长 度 。 返 回 代 码 有 : SQL_SUCCESS ,
SQL_SUCCESS_WITH_INFO , SQL_ERROR 或 者 SQL_INVALID_HANDLE 。 使 用
SQLConnect 函数连接数据源的代码示范如下:
sret = SQLConnect(hdbc, (SQLCHAR *)"DM", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS); if (RC_NOTSUCCESSFUL(sret)) { /* 连接数据源失败! */ …进行相应的错误处理… exit(0); }
SQLDriverConnect 提供了比 SQLConnect 更灵活的方法来建立 ODBC 连接。它支持以
下几种连接:要求更多连接参数的数据源,对话框提示用户输入所有的连接信息以及没有在
SQLDriverConnect 提供以下的连接方法:
1. 用一个连接字符串建立一个连接,这个字符串包括建立连接的所有数据,如 DSN,
一个或多个用户 ID 及其口令,以及其他的数据库所需要的连接信息;
2. 用一个并不完整的连接字符串来建立连接,使得 ODBC 驱动程序管理器来提示用
户输入所需要的连接信息;
3. 用一个没有在系统信息表中登记的数据源建立连接,驱动程序自动提示用户输入连
接信息;
4. 用一个连接字符串建立连接,这个字符串在 DSN 配置文件中是确定的。
SQLDriverConnect 函数 fDriverCompletion 参数说明:
1. SQL_DRIVER_PROMPT:设置此选项用来显示一个对话框来提示用户输入连接信
息;
2. SQL_DRIVER_COMPLETE:如果函数调用中包含了足够的信息,ODBC 就进行连
接,否则弹出对话框提示用户输入连接信息,此时等同于 SQL_DRIVER_PROMPT;
3. SQL_DRIVER_COMPLETE_REQUIRED:这个参数与 SQL_DRIVER_COMPLETE
参数唯一的不同是用户不能改变由函数提供的信息;
4. SQL_DRIVER_NOPROMPT:如果函数调用时有足够的信息,ODBC 就进行连接,
否则返回 SQL_ERROR。
使用 SQLDriverConnect 连接数据源的代码示范如下:
SQLCHAR szConnStrIn[256] = "DSN=DM;DRIVER=DM ODBC DRIVER; UID=SYSDBA;PWD=SYSDBA;TCP_PORT=5236"; SQLCHAR szConnStrOut[256]; SQLSMALLINT cbConnStrOut; sret = SQLDriverConnect(hdbc, NULL, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut, SQL_DRIVER_NOPROMPT); if (RC_NOTSUCCESSFUL(sret)) { /* 连接数据源失败! */ …进行相应的错误处理… exit(0); }
SQLBrowseConnect 函数与 SQLDriverConnect 函数相似,但是调用 SQLBrowseConnect
函数时,程序在运行时可以再形成一个连接字符串,使用这个函数可以用一个交互的方式来
决定连接到数据源时所需要的一些信息。
使用 SQLBrowseConnect 函数连接数据源的代码示范如下:
SQLCHAR szConnStrIn[256] = ""; SQLCHAR szConnStrOut[256]; SQLSMALLINT cbConnStrOut; strcpy(szConnStrIn, "DRIVER=DM ODBC DRIVER"); sret = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut); if (sret != SQL_NEED_DATA) { /* 连接数据源失败! */ …进行相应的错误处理… exit(0); } strcpy(szConnStrIn, "SERVER=127.0.0.1;TCP_PORT=5236");//TCP_PORT=5236 可选 sret = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut); if (sret != SQL_NEED_DATA) { /* 连接数据源失败! */ …进行相应的错误处理… exit(0); } strcpy(szConnStrIn, "UID=SYSDBA;PWD=SYSDBA;"); sret = SQLBrowseConnect(hdbc, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut); if (sret != SQL_SUCCESS) { /* 连接数据源失败! */ …进行相应的错误处理… exit(0); } /*连接成功*/
评论