一致性
引入的版本:ODBC 2.0 标准符合性:ODBC
总结
SQLDrivers 列出了驱动程序描述和驱动程序属性关键词。 该功能仅由驱动程序管理器实现。
Syntax
SQLRETURN SQLDrivers(
SQLHENV EnvironmentHandle,
SQLUSMALLINT Direction,
SQLCHAR * DriverDescription,
SQLSMALLINT BufferLength1,
SQLSMALLINT * DescriptionLengthPtr,
SQLCHAR * DriverAttributes,
SQLSMALLINT BufferLength2,
SQLSMALLINT * AttributesLengthPtr);
Arguments
环境控制
[输入]环境控制。
方向
[输入]决定驱动程序管理器是获取列表中的下一个驱动程序描述(SQL_FETCH_NEXT),还是从列表开头开始搜索(SQL_FETCH_FIRST)。
Driverdescription
[输出]指向缓冲区,返回驱动描述。
如果 DriverDescription 是 NULL,DescriptionLengthPtr 仍会返回 DriverDescription 指向的缓冲区中可返回的字符总数(不含字符数据的空终止字符)。
缓冲长度1
[输入]*DriverDescription 缓冲区的长度,单位为字符。
描述长度
[输出]指向一个缓冲区,返回*DriverDescription中可返回的字符总数(不含空终止字符)。 如果可返回的字符数大于或等于 BufferLength1,则 *DriverDescription 中的驱动程序描述会截断为 BufferLength1 减去空终止字符长度。
驾驶属性
[输出]指向缓冲区,返回驱动程序属性值对列表(见“注释”)。
如果 DriverAttributes 是 NULL,AttributesLengthPtr 仍然会返回 DriverAttributes 指向的缓冲区中可返回的总字节数(不包括字符数据的空终止字符)。
缓冲长度2
[输入]*DriverAttributes 缓冲区的长度,单位为字符。 如果 *DriverDescription 值是 Unicode 字符串(调用 SQLDriversW 时), BufferLength 参数必须是偶数。
属性长度
[输出]指向一个缓冲区,返回*DriverAttributes中可返回的总字节数(不含空终止字节)。 如果可返回的字节数大于或等于 BufferLength2,则 *DriverAttributes 中的属性值对列表会被截断为 BufferLength2 减去空终止字符的长度。
Returns
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NO_DATA、SQL_ERROR或SQL_INVALID_HANDLE。
诊断
当 SQLDrivers 返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 时,可以通过调用 SQLGetDiagRec 获得关联的 SQLSTATE 值, HandleType 为 SQL_HANDLE_ENV,Handle 为 environmentHandle。 下表列出了 SQLDrivers 通常返回的SQLSTATE值,并在此函数的上下文中解释了每个取值;“(DM)” 符号位于驱动程序管理器返回的 SQLSTATE 描述之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | 常规警告 | (DM)司机经理专用信息。 (函数返回SQL_SUCCESS_WITH_INFO。) |
| 01004 | 字符串数据,右截断 | (DM) 缓冲区 *DriverDescription 不足以返回完整的驱动程序描述。 因此,描述被截断了。 完整驱动描述的长度返回于 *DescriptionLengthPtr. (函数返回SQL_SUCCESS_WITH_INFO。) (DM) 缓冲区 *DriverAttributes 不足以返回完整的属性值对列表。 因此,名单被缩短。 未截断的属性值对列表长度返回于*AttributesLengthPtr中。 (函数返回SQL_SUCCESS_WITH_INFO。) |
| HY000 | 常规错误 | 发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。 |
| HY001 | 内存分配错误 | (DM) 驱动程序管理器无法分配支持执行或完成该函数所需的内存。 |
| HY010 | 函数序列错误 | (DM) 为 StatementHandle 调用了 SQLExecute、SQLExecDirect 或 SQLMoreResults,并返回了SQL_PARAM_DATA_AVAILABLE。 在检索所有流式处理参数的数据之前调用此函数。 |
| HY013 | 内存管理错误 | 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。 |
| HY090 | 字符串或缓冲区长度无效 | (DM) 参数 BufferLength1 指定的值小于 0。 (DM) 参数 BufferLength2 指定的值小于 0 或等于 1。 |
| HY103 | 无效检索码 | (DM) 论方 方向 指定的值不等于SQL_FETCH_FIRST或SQL_FETCH_NEXT。 |
| HY117 | 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 | (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数。 |
Comments
SQLDrivers 返回 *DriverDescription 缓冲区中的驱动程序描述。 它返回关于*DriverAttributes 缓冲区中驱动程序的额外信息,作为关键词-值对的列表。 系统信息中驱动程序列出的所有关键词都会返回,唯独 CreateDSN 用于提示数据源创建,因此是可选的。 每对以空字节结束,完整列表以空字节结束(即列表末尾有两个空字节)。 例如,使用C语法的文件驱动可能会返回以下属性列表(“\0”代表空字符):
FileUsage=1\0FileExtns=*.dbf\0\0
如果 *DriverAttributes 不足以容纳整个列表,则该列表被截断, SQLDrivers 返回 SQLSTATE 01004(数据截断),列表长度(不含最后一个空终止字节)返回为 *AttributesLengthPtr。
驱动程序属性关键词是在安装驱动程序时根据系统信息添加的。 更多信息请参见 安装ODBC组件。
应用程序可以多次调用 SQLDrivers 以获取所有驱动程序描述。 驱动程序管理器从系统信息中获取这些信息。 当驱动程序描述不再存在时, SQLDrivers 返回SQL_NO_DATA。 如果 SQLDrivers 在返回 SQL_NO_DATA 后立即调用 SQL_FETCH_NEXT,则返回第一个驱动程序描述。 关于应用程序如何使用 SQLDrivers 返回的信息,请参见 “选择数据源或驱动程序”。
如果第一次调用时就传SQL_FETCH_NEXT给 SQLDrivers,SQLDrivers 会返回第一个数据源名称。
由于 SQLDrivers 是在驱动程序管理器中实现的,因此无论某个驱动程序的标准是否合规,都支持所有驱动程序。
相关函数
| 有关以下内容的信息 | 请参阅 |
|---|---|
| 发现并列出连接数据源所需的数值 | SQLBrowseConnect 函数 |
| 连接到数据源 | SQLConnect 函数 |
| 返回数据源名称 | SQLDataSources 函数 |
| 使用连接字符串或对话框连接到数据源 | SQLDriverConnect 函数 |