1

我试图找出表中是否存在记录。现在,一种明显的方法是寻求记录:

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

但是,此操作会将光标设置为找到的记录(成功时),我不想这样做。我想我可以以某种方式快速存储当前记录号,然后将其设置回来,但也许有更好的解决方案?我在 api 中找不到正确的方法。

那么,是否可以执行 Exists,即 Seek 只是为了检查记录是否存在?

顺便说一句,我正在使用 .NET 4.0 和 ESENT 托管接口 1.9.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);

或使用布尔方法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
)

希望能帮助到你。

于 2014-07-07T08:45:39.507 回答
0

另一种技术是使用该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

于 2016-07-14T16:40:22.550 回答