SQLDataSources 函数

一致性
引入的版本:ODBC 1.0 标准符合性:ISO 92

总结
SQLDataSources 返回关于数据源的信息。 该功能仅由驱动程序管理器实现。

Syntax

  
SQLRETURN SQLDataSources(  
     SQLHENV          EnvironmentHandle,  
     SQLUSMALLINT     Direction,  
     SQLCHAR *        ServerName,  
     SQLSMALLINT      BufferLength1,  
     SQLSMALLINT *    NameLength1Ptr,  
     SQLCHAR *        Description,  
     SQLSMALLINT      BufferLength2,  
     SQLSMALLINT *    NameLength2Ptr);  

Arguments

环境控制
[输入]环境控制。

方向
[输入]确定驱动程序管理器返回信息的来源。 可以是:

SQL_FETCH_NEXT(获取列表中的下一个数据源名称)、SQL_FETCH_FIRST(从列表开头获取)、SQL_FETCH_FIRST_USER(获取第一个用户DSN)或SQL_FETCH_FIRST_SYSTEM(获取第一个系统DSN)。

Direction 设置为 SQL_FETCH_FIRST 时,后续调用 SQLDataSources 并设置 Direction 为 SQL_FETCH_NEXT 时,会返回用户和系统 DSN。 当 Direction 设置为 SQL_FETCH_FIRST_USER 时,所有后续对 SQLDataSources 的调用(将 Direction 设为 SQL_FETCH_NEXT 时,只返回用户 DSN。 当 Direction 设置为 SQL_FETCH_FIRST_SYSTEM 时,所有后续对 SQLDataSources 的调用(将 Direction 设为 SQL_FETCH_NEXT 时,仅返回系统 DSN。

ServerName
[输出]指向缓冲区,返回数据源名称。

如果 ServerNameNULL,NameLength1Ptr 仍然会返回 ServerName指向的缓冲区中可返回的字符总数(不含字符数据的null终止字符)。

缓冲长度1
[输入]*ServerName 缓冲区的长度(字符数);这不需要超过SQL_MAX_DSN_LENGTH加上零终止字符。

姓名长度1Ptr
[输出]指向一个缓冲区,返回*ServerName中可返回的字符总数(不含空终止字符)。 如果可返回的字符数大于或等于 BufferLength1,则 *ServerName 中的数据源名称会截断为 BufferLength1 减去空终止字符的长度。

描述
[输出]指向缓冲区,返回与数据源关联的驱动程序描述。 例如,dBASE 或 SQL Server。

如果 DescriptionNULL,NameLength2Ptr 仍会返回描述指向缓冲区中可返回的字符总 数(不含字符数据的 null-终止字符)。

缓冲长度2
[输入]*描述 缓冲区字符长度。

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

Returns

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NO_DATA、SQL_ERROR或SQL_INVALID_HANDLE。

诊断

SQLDataSources 返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 时,可以通过调用 SQLGetDiagRec 获得关联的 SQLSTATE 值, HandleTypeSQL_HANDLE_ENV,HandleenvironmentHandle 。 下表列出了 SQLDataSources 通常返回的SQLSTATE值,并在该函数的上下文中对每个值进行了解释;“(DM)” 符号位于驱动程序管理器返回的 SQLSTATE 描述之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。

SQLSTATE Error Description
01000 常规警告 (DM)司机经理专用信息。 (函数返回SQL_SUCCESS_WITH_INFO。)
01004 字符串数据,右截断 (DM) 缓冲区 *ServerName 不足以返回完整的数据源名称。 因此,名称被简化。 整个数据源名称的长度以 *NameLength1ptr 形式返回。 (函数返回SQL_SUCCESS_WITH_INFO。)

(DM) 缓冲区 *描述 不足以返回完整的驱动程序描述。 因此,描述被截断了。 未截断数据源描述的长度以 *NameLength2ptr 格式返回。 (函数返回SQL_SUCCESS_WITH_INFO。)
HY000 常规错误 (DM) 发生错误时,没有特定的 SQLSTATE 对应,也没有针对实现的 SQLSTATE 定义。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。
HY001 内存分配错误 (DM) 驱动程序管理器无法分配支持执行或完成该函数所需的内存。
HY010 函数序列错误 (DM) 为 StatementHandle 调用了 SQLExecuteSQLExecDirectSQLMoreResults,并返回了SQL_PARAM_DATA_AVAILABLE。 在检索所有流式处理参数的数据之前调用此函数。
HY013 内存管理错误 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。
HY090 字符串或缓冲区长度无效 (DM) 参数 BufferLength1 指定的值小于 0。

(DM) 参数 BufferLength2 指定的值小于 0。
HY103 无效检索码 (DM) 论元 Direction 指定的值不等于SQL_FETCH_FIRST、SQL_FETCH_FIRST_USER、SQL_FETCH_FIRST_SYSTEM或SQL_FETCH_NEXT。
HY117 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数

Comments

由于 SQLDataSources 是在驱动程序管理器中实现的,因此无论某个驱动程序的标准是否合规,都支持所有驱动程序。

应用程序可以多次调用 SQLDataSources 以获取所有数据源名称。 驱动程序管理器从系统信息中获取这些信息。 当没有更多数据源名称时,驱动程序管理器返回SQL_NO_DATA。 如果在返回SQL_NO_DATA后立即调用 SQL_FETCH_NEXT SQLDataSources ,则返回第一个数据源名称。 有关应用程序如何使用 SQLDataSources 返回的信息,请参见 “选择数据源或驱动程序”。

如果SQL_FETCH_NEXT在第一次被调用时就传递给 SQLDataSources ,它会返回第一个数据源名称。

驱动程序决定数据源名称如何映射到实际数据源。

有关以下内容的信息 请参阅
发现并列出连接数据源所需的数值 SQLBrowseConnect 函数
连接到数据源 SQLConnect 函数
使用连接字符串或对话框连接到数据源 SQLDriverConnect 函数
返回驱动程序说明和属性 SQLDrivers 函数