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