一致性
推出版本:ODBC 3.0 标准合规:ISO 92
总结
SQLGetDescRec 返回描述符记录中多个字段的当前设置或值。 返回的字段描述了列或参数数据的名称、数据类型及存储。
Syntax
SQLRETURN SQLGetDescRec(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLCHAR * Name,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr,
SQLSMALLINT * TypePtr,
SQLSMALLINT * SubTypePtr,
SQLLEN * LengthPtr,
SQLSMALLINT * PrecisionPtr,
SQLSMALLINT * ScalePtr,
SQLSMALLINT * NullablePtr);
Arguments
DescriptorHandle
[输入]描述符的使用。
RecNumber
[输入]表示应用程序获取信息的描述符记录。 描述符记录从1开始编号,记录编号0是书签记录。
RecNumber 参数必须小于或等于 SQL_DESC_COUNT。 如果 RecNumber 小于或等于 SQL_DESC_COUNT,但该行不包含列或参数的数据,调用 SQLGetDescRec 将返回字段的默认值。 (更多信息请参见 SQLSetDescField 中的“描述符字段初始化”。)
Name
[输出]指向缓冲区的指针,用于返回描述符记录的SQL_DESC_NAME字段。
如果 Name 是 NULL,StringLengthPtr 仍会返回 Name 指向的缓冲区中可返回的字符总 数(不含字符数据的 null-termination 字符)。
BufferLength
[输入]*名称 缓冲区的长度,以字符为单位。
StringLengthPtr
[输出]指向缓冲区的指针,用于返回*Name 缓冲区中可返回的数据字符数(不含空终止字符)。 如果字符数大于或等于 BufferLength,则 *Name 中的数据会被截断为 BufferLength 减去空终止字符长度,并由驱动程序进行空终止。
TypePtr
[输出]指向缓冲区的指针,用于返回描述符记录的SQL_DESC_TYPE字段值。
亚型Ptr
[输出]对于类型为SQL_DATETIME或SQL_INTERVAL的记录,这是一个指向缓冲区的指针,用于返回SQL_DESC_DATETIME_INTERVAL_CODE字段的值。
长度Ptr
[输出]指向缓冲区的指针,用于返回描述符记录的SQL_DESC_OCTET_LENGTH字段值。
精密Ptr
[输出]一个指向缓冲区的指针,用于返回描述符记录的SQL_DESC_PRECISION字段值。
ScalePtr
[输出]指向缓冲区的指针,用于返回描述符记录的SQL_DESC_SCALE字段值。
NullablePtr
[输出]指向缓冲区的指针,用于返回描述符记录的SQL_DESC_NULLABLE字段值。
Returns
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_NO_DATA或SQL_INVALID_HANDLE。
如果 RecNumber 大于当前描述符记录数量,则返回 SQL_NO_DATA。
如果 DescriptorHandle 是 IRD 句柄且语句处于准备或执行状态,但没有关联的开光标,则返回 SQL_NO_DATA。
诊断
当 SQLGetDescRec 返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 时,可以通过调用 SQLGetDiagRec 获得关联的 SQLSTATE 值,HandleType 为 SQL_HANDLE_DESC,Handle 为 DescriptorHandle 。 下表列出了 SQLGetDescRec 通常返回的SQLSTATE值,并在此函数的上下文中解释了每个值;“(DM)” 符号位于驱动程序管理器返回的 SQLSTATE 描述之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | 常规警告 | 特定于驱动程序的信息性消息。 (函数返回SQL_SUCCESS_WITH_INFO。) |
| 01004 | 字符串数据,右截断 | 缓冲区 *Name 不够大,无法返回整个描述符字段。 因此,场地被截断了。 未截断描述符字段的长度在 *StringLengthPtr 中返回。 (函数返回SQL_SUCCESS_WITH_INFO。) |
| 07009 | 无效描述子索引 |
FieldIdentifier 参数是记录字段,RecNumber 参数设置为 0,DescriptorHandle 参数是 IPD 句柄。 (DM) RecNumber 参数设置为 0,SQL_ATTR_USE_BOOKMARKS 语句属性设为 SQL_UB_OFF,DescriptorHandle 参数是 IRD 句柄。 RecNumber 论点小于 0。 |
| 08S01 | 通信链接失败 | 驱动程序与驱动程序连接到的数据源之间的通信链接在函数完成处理之前失败。 |
| HY000 | 常规错误 | 发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。 |
| HY001 | 内存分配错误 | 驱动程序无法分配支持执行或完成该函数所需的内存。 |
| HY007 | 未准备好关联的语句 | DescriptorHandle 关联了一个 IRD,且关联的语句句柄不处于准备或执行状态。 |
| HY010 | 函数序列错误 | (DM) DescriptorHandle 关联到一个 StatementHandle,该 StatementHandle 调用了一个异步执行的函数(非这个),且在调用该函数时仍在执行。 (DM) DescriptorHandle 关联到一个 StatementHandle ,调用 SQLExecute、 SQLExecDirect、 SQLBulkOperations 或 SQLSetPos 后返回SQL_NEED_DATA。 在为所有数据执行参数或列发送数据之前调用此函数。 (DM) 为与 描述符关联的连接句柄调用了一个异步执行函数。 当调用 SQLGetDescRec 时,这个异步函数仍在执行。 |
| HY013 | 内存管理错误 | 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。 |
| HY117 | 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 | (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数。 |
| HYT01 | 超过连接超时时间 | 在数据源响应请求之前,连接超时期限已过期。 连接超时期限通过 SQLSetConnectAttr 设置,SQL_ATTR_CONNECTION_TIMEOUT。 |
| IM001 | 驱动程序不支持此函数 | (DM) 与 描述符Handle 关联的驱动程序不支持该函数。 |
Comments
应用程序可以调用 SQLGetDescRec 以获取以下描述符字段的值,针对单个列或参数:
SQL_DESC_NAME
SQL_DESC_TYPE
SQL_DESC_DATETIME_INTERVAL_CODE(用于类型为SQL_DATETIME或 SQL_INTERVAL 的记录)
SQL_DESC_OCTET_LENGTH
SQL_DESC_PRECISION(SQL描述精度)
SQL_DESC_SCALE
SQL_DESC_NULLABLE
SQLGetDescRec 不会检索头字段的值。
应用程序可以通过将对应字段的参数设置为空指针来阻止字段设置的返回。
当应用程序调用 SQLGetDescRec 以获取某个描述符类型未定义字段的值时,函数返回 SQL_SUCCESS,但该字段返回的值是未定义的。 例如,调用 APD 或 ARD 的SQL_DESC_NAME或SQL_DESC_NULLABLE字段调用 SQLGetDescRec 会返回SQL_SUCCESS但字段值未定义。
当应用程序调用 SQLGetDescRec 以获取为特定描述符类型定义但没有默认值且尚未设置的字段值时,函数返回 SQL_SUCCESS,但该字段返回的值尚未定义。 更多信息请参见 SQLSetDescField 中的“描述符字段初始化”。
字段的值也可以通过调用 SQLGetDescField 单独检索。 关于描述符头或记录中字段的描述,请参见 SQLSetDescField。 有关描述符的详细信息,请参阅描述符。
相关函数
| 有关以下内容的信息 | 请参阅 |
|---|---|
| 装订一列 | SQLBindCol 函数 |
| 参数绑定 | SQLBindParameter 函数 |
| 获取描述符字段 | SQLGetDescField 函数 |
| 设置多个描述字段 | SQLSetDescRec 函数 |