SQLDriverConnect -连接到数据源
SQLDriverConnect() 是 SQLConnect()的替代方法。 这两个函数都建立与目标数据库的连接,但 SQLDriverConnect() 使用连接字符串来确定数据源名称,用户标识和密码。 这些函数相同; 出于兼容性目的,支持这两个函数。
语法
SQLRETURN SQLDriverConnect (SQLHDBC ConnectionHandle,
SQLPOINTER WindowHandle,
SQLCHAR *InConnectionString,
SQLSMALLINT StringLength1,
SQLCHAR *OutConnectionString,
SQLSMALLINT BufferLength,
SQLSMALLINT *StringLength2Ptr,
SQLSMALLINT DriverCompletion); 函数自变量
| 数据类型 | 自变量 | 使用 | 描述 |
|---|---|---|---|
| SQLHDBC | ConnectionHandle | 输入 | 连接句柄。 |
| SQLPOINTER | WindowHandle | 输入 | 对于 DB2 for Linux®, UNIX 和 Windows ,这是父句柄。 在 Db2 for i上,会将其忽略。 |
| SQLCHAR * | InConnectionString | 输入 | 完整,部分或空 (空指针) 连接字符串。 |
| SQLSMALLINT | StringLength1 | 输入 | InConnectionString 的长度。 |
| SQLCHAR * | OutConnectionString | 输出 | 指向已完成连接字符串的缓冲区的指针。 如果成功建立连接,那么此缓冲区包含已完成的连接字符串。 |
| SQLSMALLINT | BufferLength | 输入 | OutConnectionString 所指向缓冲区的最大大小。 |
| SQLSMALLINT * | StringLength2Ptr | 输出 | OutConnectionString 缓冲区中可返回字节数的指针。 如果 StringLength2Ptr的值大于或等于 BufferLength、OutConnectionString中完成的连接字符串将被截断为 BufferLength-1 字节。 |
| SQLSMALLINT | DriverCompletion | 输入 | 这指示 Db2 for i CLI 何时应提示用户获取更多信息。 可能的值:
|
用法
连接字符串用于传递完成连接所需的一个或多个值。 连接字符串的内容和 DriverCompletion 的值确定应如何建立连接。
前面的每个关键字都有一个属性,该属性等于:
- DSN
- 数据源名称。 数据库的名称或别名。 如果 DriverCompletion 等于 SQL_DRIVER_NOPROMPT ,那么需要数据源名称。
- UID
- Authorization-name (用户标识)。
- PWD
- 与授权名称对应的密码。 如果没有用户标识的密码,那么指定为空 (PWD =;)。
IBM i 平台目前没有 Db2 for i CLI 定义的关键字。
参数 InConnectionString 中传递的输入用户 ID 和密码字符串区分大小写。
DriverCompletion 的值已验证为有效,但所有结果都具有相同的行为。 尝试使用连接字符串中包含的信息进行连接。 如果没有足够的信息,那么将返回 SQL_ERROR。
一旦建立了连接,就会返回完整的连接字符串。 需要为给定用户标识设置到同一数据库的多个连接的应用程序应存储此输出连接字符串。 然后,此字符串可以用作将来 SQLDriverConnect() 调用时的输入连接字符串值。
与 *LOCAL 关系数据库的非服务器方式连接不会导致验证连接的用户标识和密码。 *CURUSR 值将用于连接处理。
返回码
- SQL_SUCCESS
- sql_success_with_info
- sql_noo_data_found
- sql_invalid_handle
- SQL_ERROR
错误状态
SQLConnect() 生成的所有诊断也可以在此处返回。 下表显示了可返回的其他诊断。
| SQLSTATE | 描述 | 说明 |
|---|---|---|
| 01004 | 数据已截断 | 缓冲区 szConnstrOut 的大小不足以容纳整个连接字符串。 自变量 StringLength2Ptr 包含可供返回的连接字符串的实际长度。 (函数返回 SQL_SUCCESS_WITH_INFO) |
| 01S00 | 连接字符串属性无效 | 在输入连接字符串中指定了无效的关键字或属性值,但由于发生下列其中一种情况,因此与数据源的连接仍然成功:
(函数返回 SQL_SUCCESS_WITH_INFO) |
| HY009 | 参数值无效 | 参数 InConnectionString, OutConnectionString, 或 StringLength2PTR 是一个空指针。 自变量 DriverCompletion 不等于 1。 |
| HY090 | 无效的字符串或缓冲区长度 | 为 StringLength1 指定的值小于 0 ,但不等于 SQL_NTS。 为 BufferLength 指定的值小于 0。 |
| HY110 | 驱动程序完成无效 | 为自变量 DriverCompletion 指定的值不等于其中一个有效值。 |
限制
无。
示例
/* From CLI sample drivrcon.c */
/* ... */
/********************************************************************
** drv_connect - Prompt for connect options and connect **
********************************************************************/
int
drv_connect(SQLHENV henv,
SQLHDBC * hdbc,
SQLCHAR con_type)
{
SQLRETURN rc;
SQLCHAR server[SQL_MAX_DSN_LENGTH + 1];
SQLCHAR uid[MAX_UID_LENGTH + 1];
SQLCHAR pwd[MAX_PWD_LENGTH + 1];
SQLCHAR con_str[255];
SQLCHAR buffer[255];
SQLSMALLINT outlen;
printf("Enter Server Name:\n");
gets((char *) server);
printf("Enter User Name:\n");
gets((char *) uid);
printf("Enter Password Name:\n");
gets((char *) pwd);
/* Allocate a connection handle */
SQLAllocHandle( SQL_HANDLE_DBC,
henv,
hdbc
);
CHECK_HANDLE( SQL_HANDLE_DBC, *hdbc, rc);
sprintf((char *)con_str, "DSN=%s;UID=%s;PWD=%s;",
server, uid, pwd);
rc = SQLDriverConnect(*hdbc,
(SQLPOINTER) NULL,
con_str,
SQL_NTS,
buffer, 255, &outlen,
SQL_DRIVER_NOPROMPT);
if (rc != SQL_SUCCESS) {
printf("Error while connecting to database, RC= %ld\n", rc);
CHECK_HANDLE( SQL_NULL_HENV, *hdbc, rc);
return (SQL_ERROR);
} else {
printf("Successful Connect\n");
return (SQL_SUCCESS);
}
} 