3

我面临以下问题:我在数据库 index1 {binaryColumn1,binaryColumn2} 上有一个复合索引。我正在使用以下内容来设置要使用的索引:

Api.JetSetCurrentIndex(_session, _table, index1);

创建密钥:

Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey);

而不是尝试执行搜索:

Api.TrySeek(_session, _table, SeekGrbit.SeekEQ);

如果 index1 仅用于 1 列,则此方法有效,并且 seek 正确返回 true。如果我有多个列并尝试搜索单个列的值(例如 binaryColumn1 = {0x01, 0x23}),它总是返回 false。

如何搜索这个值?(ps。我不能更改索引也不能创建新索引。)这可能吗?

谢谢

4

1 回答 1

1

你所做的只会为{0x01, 0x00}. 你不能通过一次调用来做到这一点,因为第二列的值会混淆SeekEQgrbit。

您可以执行SeekGE,但随后您需要检索该列以确保该值实际上是正确的(而不是类似于{0x22, 0x23})。您必须执行以下操作: SetCurrentIndex() MakeKey( ..., binaryValue1, MakeKeyGrbit.NewKey | MakeKeyGrbit.FullColumnStartLimit); // Appends the rest of the search buffer with 0x00's. Seek(GE); MakeKey(... binaryValue1, MakeKeyGrbit.NewKey | MakeKeyGrbit.FullColumnEndLimit); // Appends the rest of the search buffer with 0xff's. Api.JetSetIndexRange(); 然后您可以使用Api.TryMoveNext()遍历该列等于的所有行binaryValue1

还要查看项目中包含的测试代码——该HowDoI.cs文件有很多很好的示例。

抱歉伪代码;目前我手头没有源代码。

-马丁

于 2016-11-11T00:29:51.983 回答