SQLDriverConnect 函数 (CLI)-连接到数据源
规范:
- 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 */
函数参数
数据类型 | 自变量 | 使用 | 描述 |
---|---|---|---|
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 驱动程序何时提示用户提供更多信息。 可能的值为如下所示:
|
用法
InConnectionString
- 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 关键字,那么将使用第一次出现的关键字。
- 开口支架 ([)
- 右括号 (])
- 左花括号 ({)
- 右花括号 (})
- 逗号 (,)
- 分号 (;)
- 问号(?)
- 星号 (*)
- 等号 (=)
- 感叹号 (!)
- At 符号 (@)
- 反斜杠 (\)
OutConnectionString
OutConnectionString可以是缓冲区的指针,也可以是空值。 如果指定了指向缓冲区的指针,那么成功连接时将使用连接字符串填充缓冲区。 需要针对同一用户标识与同一数据库建立多个连接的应用程序可以存储此输出连接字符串。 然后,返回的连接字符串可以用作将来调用 SQLDriverConnect() 函数时的输入连接字符串值。 NULL 值会导致为 OutConnectionString LengthPtr 参数指定的指针在成功连接后返回连接字符串中的字符数。
如果 CLI 初始化文件中存在任何关键字,那么将使用这些关键字及其值来扩充传递到连接字符串中的 CLI 驱动程序的信息。 如果 CLI 初始化文件中的信息与连接字符串中的信息相矛盾,那么连接字符串中的值优先。
DriverCompletion 自变量
- 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() 函数可以返回的诊断消息:
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 自变量指定的值不等于其中一个有效值。 |
示例
rc = SQLDriverConnect(hdbc,
(SQLHWND)sqlHWND,
InConnectionString,
InConnectionStringLength,
OutConnectionString,
OutConnectionStringCapacity,
StrLength2,
DriveCompletion);