Существует в 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() Метод не изменит исходную позицию курсора, если найдена строка

https://msdn.microsoft.com/en-us/library/microsoft.isam.esent.interop.api.jetdupcursor%28v=exchg.10%29.aspx?f=255&MSPPError=-2147217396

Другие вопросы по тегам