JetRetrieveColumns 函数

适用于:Windows |Windows服务器

JetRetrieveColumns 函数

JetRetrieveColumns 函数从单个操作中的当前记录中检索多个列值。 JET_RETRIEVECOLUMN结构的数组用于描述要检索的列值集,以及描述要检索的每个列值的输出缓冲区。

    JET_ERR JET_API JetRetrieveColumns(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in_out_opt  JET_RETRIEVECOLUMN* pretrievecolumn,
      __in          unsigned long cretrievecolumn
    );

参数

sesid

要用于此调用的会话。

tableid

用于此调用的游标。

pretrievecolumn

指向一个或多个 JET_RETRIEVECOLUMN 结构的数组的指针。 每个结构都包含要检索的列值以及存储返回的数据的位置的说明。

cretrievecolumn

由 pretrievecolumn 给出的数组中的JET_RETRIEVECOLUMN结构数。

返回值

此函数使用以下返回代码之一返回 JET_ERR 数据类型。 有关可能的 ESE 错误的详细信息,请参阅可扩展存储引擎错误错误处理参数

返回代码

说明

JET_errSuccess

操作已成功完成。

JET_errBadItagSequence

在 pretinfo-itagSequence> 中传递了无效的多值列序列号值。 多值列值序列号的有效值为 1 或更大。 值为 0 (零) 对此函数有效,但对 JetRetrieveColumn 无效。

JET_errBadColumnId

给定的列 ID 超出了列 ID 的法律限制。

JET_errClientRequestToStopJetService

无法完成该操作,因为由于调用 JetStopService 而停止了与会话关联的实例上的所有活动。

JET_errColumnNotFound

表中不存在由给定 columnid 描述的列。

JET_errIndexTuplesCannotRetrieveFromIndex

无法从索引中检索作为子字符串编制索引的列,因为每个索引项中通常只存在一小部分列。

JET_errInvalidBufferSize

在某些情况下,为检索列提供缓冲区的大小必须足够大,才能返回任何数量的列值。 例如,可托管可更新列会调整为调用会话的事务上下文的一致,此调整需要调用方提供的缓冲区。 如果提供缓冲区空间不足,则返回JET_errInvalidBufferSize,不返回任何列数据。

JET_errInvalidgrbit

提供的选项未知或已知位设置的非法组合。

JET_errInvalidParameter

给定的一个或多个参数不正确。 如果 retinfo.cbStruct 的大小小于 JET_RETINFO,则可能会发生这种情况。

JET_errInstanceUnavailable

无法完成该操作,因为与会话关联的实例遇到了一个致命错误,该错误要求撤销对所有数据的访问以保护该数据的完整性。

Windows XP:此错误仅由 Windows XP 和更高版本返回。

JET_errNoCurrentRecord

游标未定位在记录上。 导致这种情况发生的原因有很多。 例如,如果光标当前定位在当前索引的最后一条记录之后,将发生这种情况。

JET_errNotInitialized

无法完成该操作,因为尚未初始化与会话关联的实例。

JET_errRestoreInProgress

无法完成该操作,因为还原操作正在与会话关联的实例上进行。

JET_errSessionSharingViolation

同一会话不能同时用于多个线程。

Windows XP:此错误仅由 Windows XP 和更高版本返回。

JET_errTermInProgress

无法完成该操作,因为与会话关联的实例正在关闭。

JET_wrnBufferTruncated

无法检索整个列值,因为给定缓冲区小于列的大小。

成功后,列数据和列大小在 JET_RETRIEVECOLUMN 结构数组中所述的缓冲区中返回。 如果 itagSequence 设置为 0 (零) 以指示需要多值字段的实例数而不是列数据,则会在 itagSequence 字段本身中返回多值列的实例数。 每个 JET_RETRIEVECOLUMN 结构都有一个错误字段,其中包含检索的列的警告。 如果列为 NULL 值,则错误代码将设置为JET_wrnColumnNull。

失败时,游标位置保持不变,不会将数据复制到提供的缓冲区中。

注解

JetRetrieveColumns 支持 JetRetrieveColumn 不支持的一项功能。 这是检索多值列实例数的功能。 此功能的目的是允许应用程序检索列的所有值。 这可以通过首先确定列具有的值数来完成。 接下来,可以通过再次调用 JetRetrieveColumns 来确定其长度,并为每个值分配了一 个JET_RETRIEVECOLUMN 结构,以确定列数据的长度。 为此,可以使用 cbMax 为 0 (零) 传递 NULLpvData 指针,并在 cbActual 中检索列长度。 可以使用为列值数据分配的内存进行第三次和最后一次调用。

如果由于长度缓冲区不足而截断检索的任何列,则 API 将返回JET_wrnBufferTruncated。 但是,其他错误JET_wrnColumnNull仅在 JET_RETRIEVECOLUMN的错误字段中返回。 原因是应用程序通常希望确保已检索所有数据,并从 JetRetrieveColumns 返回此错误有助于理解。

要求

要求

客户端

需要Windows Vista、Windows XP 或 Windows 2000 Professional。

Server

需要Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

另请参阅

JET_ERR
JET_SESID
JET_TABLEID
JET_RETRIEVECOLUMN
JetEnumerateColumns
JetRetrieveColumn
JetSetColumns