我面临以下问题:我在数据库index1 {binaryColumn1,binaryColumn2}上有一个复合索引。我使用以下方法将索引设置为使用:
Api.JetSetCurrentIndex(_session, _table, index1);要创建密钥,请执行以下操作:
Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey);而不是尝试使用以下方法执行搜索:
Api.TrySeek(_session, _table, SeekGrbit.SeekEQ);如果index1仅适用于1列,则此操作有效并正确地寻求返回true。如果我有多个列,并尝试搜索单个列的值(例如。对于binaryColumn1 = {0x01,0x23}),它总是返回false。
如何搜索这个值?(ps. )我不能更改索引,也不能创建新索引。)这个是可能的吗?
谢谢
发布于 2016-11-11 00:29:51
你所做的只会对{0x01, 0x00}有效。您不能用一个调用来完成这个任务,因为第二列的值将混合SeekEQ grbit。
您可以执行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文件有很多好的示例。
对不起,伪代码,我现在手头没有源代码。
-martin
https://stackoverflow.com/questions/40522977
复制相似问题