Существует в ESENT
Я пытаюсь выяснить, существует ли запись в таблице. Теперь, один очевидный способ будет просто искать запись:
// Create correct keys for index with Api.MakeKey
Api.JetSeek(sessionId, tableId, SeekGrbit.SeekEQ);
Однако эта операция установит курсор на найденную запись (в случае успеха), что я не хочу делать. Я думаю, я мог бы как-то просто быстро сохранить текущий номер записи и затем установить его обратно, но, может быть, есть лучшее решение? Я не мог найти правильный метод в API.
Итак, возможно ли сделать Exists, то есть Seek, просто чтобы проверить, существует ли запись?
Кстати, я использую.NET 4.0 с ESENT Managed Interface 1.9.0.
2 ответа
Во-первых, получить текущую позицию курсора с помощью метода JetGetRecordPosition
public static void JetGetRecordPosition(
JET_SESID sesid,
JET_TABLEID tableid,
out JET_RECPOS recpos
)
Затем проверьте, существует ли запись, как вы сделали
Api.JetSeek(sessionId, tableId, SeekGrbit.SeekEQ);
или используя логический метод TrySeek, который возвращает true, если была найдена запись, соответствующая критериям.
public static bool TrySeek(
JET_SESID sesid,
JET_TABLEID tableid,
SeekGrbit grbit
)
Затем вам нужно установить курсор на предыдущую позицию, для этого используйте метод Api.JetGotoPosition с recpos, полученным из первого метода.
public static void JetGotoPosition(
JET_SESID sesid,
JET_TABLEID tableid,
JET_RECPOS recpos
)
Надеюсь, поможет.
Другой метод заключается в использовании JetDupCursor()
способ создать новый JET_TABLEID
который не зависит от текущего JET_TABLEID
, Таким образом, TrySeek()
Метод не изменит исходную позицию курсора, если найдена строка