SQLDriverConnect -连接到数据源

SQLDriverConnect()SQLConnect()的替代方法。 这两个函数都建立与目标数据库的连接,但 SQLDriverConnect() 使用连接字符串来确定数据源名称,用户标识和密码。 这些函数相同; 出于兼容性目的,支持这两个函数。

Unicode (UTF-16) 等效: 此函数还可以与 Unicode (UTF-16) 字符集配合使用。 相应的 Unicode 函数是 SQLDriverConnectW() 。有关 DB2® CLI 的 Unicode 支持的更多信息,请参阅 Db2 for i CLI 中的 Unicode

语法

SQLRETURN   SQLDriverConnect (SQLHDBC           ConnectionHandle,
                              SQLPOINTER        WindowHandle,
                              SQLCHAR           *InConnectionString,
                              SQLSMALLINT       StringLength1,
                              SQLCHAR           *OutConnectionString,
                              SQLSMALLINT       BufferLength,
                              SQLSMALLINT       *StringLength2Ptr,
                              SQLSMALLINT       DriverCompletion);

函数自变量

表 1. SQLDriverConnect 参数
数据类型 自变量 使用 描述
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的值大于或等于 BufferLengthOutConnectionString中完成的连接字符串将被截断为 BufferLength-1 字节。

SQLSMALLINT DriverCompletion 输入 这指示 Db2 for i CLI 何时应提示用户获取更多信息。

可能的值:

  • sql_driver_complete
  • sql_driver_complete_required
  • sql_driver_noprompt

用法

连接字符串用于传递完成连接所需的一个或多个值。 连接字符串的内容和 DriverCompletion 的值确定应如何建立连接。

读取语法图跳过可视语法图;连接字符串语法=属性
连接字符串语法
读取语法图跳过可视语法图DSNUIDPWDDB2 CLI-defined-keyword

前面的每个关键字都有一个属性,该属性等于:

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() 生成的所有诊断也可以在此处返回。 下表显示了可返回的其他诊断。

表 2。 SQLDriverConnect SQLSTATEs
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);
    }
}

引用

SQLConnect-连接到数据源