SQLDrivers 函数

一致性
引入的版本: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
[输出]指向缓冲区,返回驱动描述。

如果 DriverDescriptionNULL,DescriptionLengthPtr 仍会返回 DriverDescription 指向的缓冲区中可返回的字符总数(不含字符数据的空终止字符)。

缓冲长度1
[输入]*DriverDescription 缓冲区的长度,单位为字符。

描述长度
[输出]指向一个缓冲区,返回*DriverDescription中可返回的字符总数(不含空终止字符)。 如果可返回的字符数大于或等于 BufferLength1,则 *DriverDescription 中的驱动程序描述会截断为 BufferLength1 减去空终止字符长度。

驾驶属性
[输出]指向缓冲区,返回驱动程序属性值对列表(见“注释”)。

如果 DriverAttributesNULL,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 值, HandleTypeSQL_HANDLE_ENV,HandleenvironmentHandle。 下表列出了 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 调用了 SQLExecuteSQLExecDirectSQLMoreResults,并返回了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 函数