2016年11月30日水曜日

C# ESENT 講座 Esent.Interop.dll 使用

インデックスを選択

Api.JetSetCurrentIndex(sesid, tableid, "indexName");

これでインデックス順にソートされます。Api.TryMoveFirst と Api.TryMoveNext で反復します。

インデックスで 1 レコードを検索

Api.JetSetCurrentIndex(ses.JetSesid, Streams.JetTableid, "Id");
Api.MakeKey(ses.JetSesid, Streams.JetTableid, Id, MakeKeyGrbit.NewKey);
Api.TrySeek(ses.JetSesid, Streams.JetTableid, SeekGrbit.SeekEQ)

これでいけるはずです。SeekGrbit.SeekGE などの場合は、値も比較すると良いかも。

UInt32 RealId = Api.RetrieveColumnAsUInt32(ses.JetSesid, Streams.JetTableid, C.Streams_Id) ?? 0U;
if (RealId == Id) { ... }

絶対レコード位置を取得

byte[] tmpMark = new byte[1024];
int cbMark = tmpMark.Length;
Api.JetGetBookmark(sesid, tableid, tmpMark, tmpMark.Length, out cbMark);

絶対レコード位置へ移動

Api.JetGotoBookmark(sesid, tableid, vr.mark, vr.mark.Length);

Note: EsentNoCurrentRecordException を食らう場合があります。

レコードを更新

Api.JetPrepareUpdate(ses.JetSesid, Folders.JetTableid, JET_prep.Replace);
Api.SetColumn(ses.JetSesid, Folders.JetTableid, C.FLDCOL_PARENT, FLDCOL_IDto);
Api.JetUpdate(ses.JetSesid, Folders.JetTableid);