1

テーブルにレコードが存在するかどうかを確認しようとしています。さて、明らかな方法の 1 つは、レコードを探すことです。

// Create correct keys for index with Api.MakeKey
Api.JetSeek(sessionId, tableId, SeekGrbit.SeekEQ);

ただし、この操作はカーソルを見つかったレコードに設定します (成功した場合)。これはやりたくないことです。どういうわけか、現在のレコード番号をすばやく保存してから元に戻すことができると思いますが、もっと良い解決策があるでしょうか? API で正しいメソッドが見つかりませんでした。

では、レコードが存在するかどうかを確認するためだけに Seek を意味する Exists を実行することは可能ですか?

ちなみに、ESENT Managed Interface 1.9.0 で .NET 4.0 を使用しています。

4

2 に答える 2

1

まず、JetGetRecordPositionメソッドを使用して現在のカーソル位置を取得します。

public static void JetGetRecordPosition(
    JET_SESID sesid,
    JET_TABLEID tableid,
    out JET_RECPOS recpos
)

次に、行ったようにレコードが存在するかどうかを確認します

Api.JetSeek(sessionId, tableId, SeekGrbit.SeekEQ);

または、条件に一致するレコードが見つかった場合に true を返すブール メソッドTrySeekを使用します。

public static bool TrySeek(
    JET_SESID sesid,
    JET_TABLEID tableid,
    SeekGrbit grbit
)

次に、カーソルを前の位置に設定する必要があります。これを行うには、最初のメソッドから取得した recpos でApi.JetGotoPositionメソッドを使用します。

public static void JetGotoPosition(
    JET_SESID sesid,
    JET_TABLEID tableid,
    JET_RECPOS recpos
)

それが役に立てば幸い。

于 2014-07-07T08:45:39.507 に答える