SQLDriverConnect 函数 (CLI)-连接到数据源

建立与目标数据库的连接。 SQLDriverConnect() 函数支持连接字符串以及提示用户输入连接信息的功能。

规范:

  • CLI 2.1
  • ODBC 1.0

SQLDriverConnect() 函数是 SQLConnect() 函数的替代方法。 当数据源需要超过 SQLConnect() 函数所支持的三个参数 (数据源名称,用户标识和密码) 时,或者当您需要 CLI 驱动程序提示用户输入所需的连接信息时,可以使用 SQLDriverConnect() 函数。

仅当连接成功后,才会以纯文本形式返回完整的连接字符串。 您可以对应用程序进行编码,以存储针对后续连接请求返回的连接字符串。

语法

SQLRETURN  SQLDriverConnect (
        SQLHDBC       ConnectionHandle,               /* hdbc */
        SQLHWND       WindowHandle,                   /* hwnd */
        SQLCHAR       *InConnectionString,            /* szConnStrIn */
        SQLSMALLINT   InConnectionStringLength,       /* cbConnStrIn */
        SQLCHAR       *OutConnectionString,           /* szConnStrOut */
        SQLSMALLINT   OutConnectionStringCapacity,    /* cbConnStrOutMax */
        SQLSMALLINT   *OutConnectionStringLengthPtr,  /* pcbConnStrOut */
        SQLUSMALLINT  DriverCompletion);              /* fDriverCompletion */

函数参数

表 1. SQLDriverConnect 函数自变量
数据类型 自变量 使用 描述
SQLHDBC ConnectionHandle 输入 连接句柄。
SQLHWND WindowHandle 输入 窗口手柄。 WindowHandle 参数值是父 Windows 操作系统句柄。 仅在 Windows 操作系统上支持窗口句柄。

如果传递了 NULL 值,那么不会显示用户提示。

SQLCHAR * InConnectionString 输入 连接字符串。 请参阅用法部分以获取详细信息。
SQLSMALLINT InConnectionStringLength 输入 存储为 InConnectionString 参数指定的连接字符串所需的 SQLCHAR 元素(或此函数的 Unicode 变体的 SQLWCHAR 元素)的数量。
SQLSMALLINT * OutConnectionString 输出 指向成功连接的已完成连接字符串的缓冲区的指针或 NULL 值。

对于此缓冲区,应用程序必须至少分配您为预定义的最大长度 (SQL_MAX_OPTION_STRING_LENGTH) 指定的字节数。

SQLSMALLINT
OutConnectionString
容量
输入 通过 OutConnectionString缓冲区返回的连接字符串所需的SQLCHAR元素(或此函数的Unicode变体的SQLWCHAR元素)的数量。
SQLSMALLINT *
OutConnectionString
LengthPtr
输出 指向SQLCHAR元素(或此函数的Unicode变体的SQLWCHAR元素)数量的指针,不包括空终止字符,可用于返回 OutConnectionString指定的缓冲区中。

如果 *OutConnectionStringLengthPtr返回的长度值大于或等于 OutConnectionStringCapacity ,则 OutConnectionString缓冲区中完整的连接字符串将被截断为 OutConnectionStringCapacity SQLCHAR或SQLWCHAR元素。

SQLUSMALLINT DriverCompletion 输入 指示 CLI 驱动程序何时提示用户提供更多信息。
可能的值为如下所示:
  • SQL_DRIVER_COMPLETE
  • SQL_DRIVER_COMPLETE_REQUIRED
  • SQL_DRIVER_NOPROMPT
  • SQL_DRIVER_PROMPT

用法

Unicode 等效项: 您还可以将此函数与 Unicode 字符集配合使用。 对应的 Unicode 函数为 SQLDriverConnectW()

InConnectionString

InConnectionString由有效的连接字符串组成。 连接字符串具有以下语法:
Read syntax diagramSkip visual syntax diagram" DRIVER={driver_name}; DSN=dsn_name;DATABASE=database_namedatabase:server:port; UID=user_id;PWD=password;NEWPWD=new_password; ;CLI_keyword=CLI_keyword_value ;"
DRIVER=driver_name
数据库驱动程序的名称。 您可以使用 SQLDrivers() 函数获取数据库驱动程序的名称。
DSN=dsn_name
要连接到的数据源的名称。 除非 DriverCompletion 自变量等于 SQL_DRIVER_NOPROMPT 或指定了 DATABASE 关键字值,否则连接需要 DSN 关键字值。
DATABASE=database_name
数据库标识。 数据库名称可以仅由数据库名称组成,也可以由数据库名称,服务器名称和端口号组成。 如果未提供服务器名称和端口号,那么将使用缺省值。 缺省服务器名称为 LOCALHOST ,缺省端口号为 50000。 除非 DriverCompletion 自变量等于 SQL_DRIVER_NOPROMPT 或指定了 DSN 关键字值,否则连接需要 DATABASE 关键字值。
UID
为连接认证请求指定的用户标识。
PWD
对应于指定用户标识的密码。
NEWPWD
用作更改密码请求的一部分的新密码。 如果未将 DriverCompletion 自变量设置为 SQL_DRIVER_NOPROMPT,那么可以在连接字符串中指定新密码,或者在连接字符串中为新密码提示指定 NEWPWD=;
CLI_keyword
用于配置 CLI 驱动程序行为的 CLI 配置关键字。 如果在连接字符串中多次指定了任何 CLI 关键字,那么将使用第一次出现的关键字。
对于连接字符串关键字 ( PWDNEWPWD 关键字除外) 及其值,请避免使用以下字符:
  • 开口支架 ([)
  • 右括号 (])
  • 左花括号 ({)
  • 右花括号 (})
  • 逗号 ()
  • 分号 (;)
  • 问号(?
  • 星号 (*)
  • 等号 (=)
  • 感叹号 (!)
  • At 符号 (@)
  • 反斜杠 (\)
CLI 驱动程序支持 PWDNEWPWD 关键字的特殊字符,但存在一些限制。 请参阅相关参考中的 "驱动程序和 CLPPlus 的密码规则" 主题以获取详细信息。

OutConnectionString

OutConnectionString可以是缓冲区的指针,也可以是空值。 如果指定了指向缓冲区的指针,那么成功连接时将使用连接字符串填充缓冲区。 需要针对同一用户标识与同一数据库建立多个连接的应用程序可以存储此输出连接字符串。 然后,返回的连接字符串可以用作将来调用 SQLDriverConnect() 函数时的输入连接字符串值。 NULL 值会导致为 OutConnectionString LengthPtr 参数指定的指针在成功连接后返回连接字符串中的字符数。

如果 CLI 初始化文件中存在任何关键字,那么将使用这些关键字及其值来扩充传递到连接字符串中的 CLI 驱动程序的信息。 如果 CLI 初始化文件中的信息与连接字符串中的信息相矛盾,那么连接字符串中的值优先。

DriverCompletion 自变量

DriverCompletion 参数的以下值确定 CLI 驱动程序是否提示用户获取更多信息:
SQL_DRIVER_COMPLETE
仅当连接字符串中的信息不足时,才会启动对话。 连接字符串中的信息用作初始值,并由提示用户时输入的数据进行补充。
SQL_DRIVER_COMPLETE_REQUIRED
仅当连接字符串中的信息不足时,才会启动对话。 连接字符串中的信息用作初始值。 系统仅提示用户输入必需的信息。
SQL_DRIVER_NOPROMPT
系统不会提示用户输入任何信息。 尝试使用连接字符串中的信息进行连接。 如果没有足够的信息,那么将返回 SQL_ERROR 消息。
SQL_DRIVER_PROMPT
将始终启动对话。 连接字符串和 CLI 初始化文件中的信息将用作初始值。

建立连接后,将返回完整的连接字符串。 需要与具有相同用户标识的同一数据库建立多个连接的应用程序可以存储此输出连接字符串。 然后,此字符串可以用作将来 SQLDriverConnect() 调用时的输入连接字符串值。

返回码

  • SQL_ERROR
  • SQL_INVALID_HANDLE
  • SQL_NO_DATA_FOUND
  • SQL_SUCCESS
  • SQL_SUCCESS_WITH_INFO

Diagnostics

下表包含 SQLDriverConnect() 函数可以返回的诊断消息:

表 2. SQLDriverConnect 函数可以返回的 SQLSTATES 值
SQLSTATE 描述 说明
01004 数据被截断。 szConnstrOut 不足以容纳整个连接字符串。 *OutConnectionStringLengthPtr包含可用于返回的连接字符串的实际长度。 此函数返回 SQL_SUCCESS_WITH_INFO。
01S00 连接字符串属性无效。 在输入连接字符串中指定了无效的关键字或属性值,但由于发生了下列其中一个事件,因此与数据源的连接成功:
  • 忽略了无法识别的关键字。
  • 忽略了无效的属性值,而是使用了缺省值。

此函数返回 SQL_SUCCESS_WITH_INFO。

HY000 常规错误。

对话失败

在连接字符串中指定的信息不足以发出连接请求,但是通过将 fCompletion 设置为 SQL_DRIVER_NOPROMPT 来禁止对话。

尝试启动对话框失败。

HY090 字符串或缓冲区长度无效。 InConnectionStringLength指定的值小于0,但不等同于SQL_NTS。

OutConnectionStringCapacity指定值小于0。

HY110 驱动程序完成无效。 fCompletion 自变量指定的值不等于其中一个有效值。

示例

以下代码示例演示了如何使用 SQLDriverConnect() 函数:
    rc = SQLDriverConnect(hdbc,
                          (SQLHWND)sqlHWND,
                          InConnectionString,
                          InConnectionStringLength,
                          OutConnectionString,
                          OutConnectionStringCapacity,
                          StrLength2,
                          DriveCompletion);