iLog::ReadRecord 方法 (txlogpub.h)

从日志中读取记录。

语法

HRESULT ReadRecord(
  [in]      LSN   lsnToRead,
  [in, out] LSN   *plsnPrev,
  [in, out] LSN   *plsnNext,
  [out]     BYTE  **ppbData,
  [out]     ULONG *pcbData
);

参数

[in] lsnToRead

要读取的记录的 LSN。

[in, out] plsnPrev

指向上一条记录的 LSN 的指针, (紧邻要读取) 的记录前面的记录。 如果不需要上一条记录的 LSN,此参数可以为 NULL 。 如果日志中没有以前的记录,或者发生错误,则此参数为 0。

[in, out] plsnNext

指向下一条记录的 LSN 的指针 (紧跟在要读取) 的记录之后的记录。 如果不需要下一条记录的 LSN,此参数可以为 NULL 。 如果日志中没有下一条记录,则此参数为 MAXLSN (0x7FFFFFFFFFFFFFFF) 。 如果发生错误,此参数为 0。

[out] ppbData

指向变量的指针,该变量将包含指向返回时记录数据的指针。 此数据的内存由 ReadRecord 分配并由调用方释放, (请参阅 CoTaskMemFree) 。 如果发生错误,此参数为 NULL

[out] pcbData

指向变量的指针,该变量在返回时接收记录数据的大小(以字节为单位)。

返回值

此方法可以返回以下值以及其他 HRESULT 值。

返回代码 说明
S_OK
记录已成功从日志中读取。
XACT_E_INVALIDLSN
lsnToRead 超出了日志的当前限制。 请参阅 ILog::GetLogLimits
E_INVALIDARG
lsnToRead 在日志的当前限制范围内,但它不是日志中记录的 LSN。
E_OUTOFMEMORY
由于内存不足,记录未返回。

注解

尽管使用 ILog::AppendRecord 追加到日志的记录可以从多个 BLOB 连接, 但 ReadRecord 会将记录作为单个不透明的数据 Blob 返回。 ILog 不提供从记录中提取单个 BLOB 的方法。 调用方负责分析 ReadRecord 返回的记录中的数据。

调用方备注

如果日志包含非常大的记录,此方法可能会失败,因为 ReadRecord 无法为记录数据分配足够的内存。 如果记录的大小有限,或者如果只需要记录的初始部分,则调用 ILog::ReadRecordPrefix 可能更有效。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 txlogpub.h

另请参阅

ILog