一致性
引入的版本: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
[输出]指向缓冲区,返回数据源名称。
如果 ServerName 是 NULL,NameLength1Ptr 仍然会返回 ServerName指向的缓冲区中可返回的字符总数(不含字符数据的null终止字符)。
缓冲长度1
[输入]*ServerName 缓冲区的长度(字符数);这不需要超过SQL_MAX_DSN_LENGTH加上零终止字符。
姓名长度1Ptr
[输出]指向一个缓冲区,返回*ServerName中可返回的字符总数(不含空终止字符)。 如果可返回的字符数大于或等于 BufferLength1,则 *ServerName 中的数据源名称会截断为 BufferLength1 减去空终止字符的长度。
描述
[输出]指向缓冲区,返回与数据源关联的驱动程序描述。 例如,dBASE 或 SQL Server。
如果 Description 是 NULL,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 值, HandleType 为 SQL_HANDLE_ENV,Handle 为 environmentHandle 。 下表列出了 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 调用了 SQLExecute、SQLExecDirect 或 SQLMoreResults,并返回了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 函数 |