2016-11-10 76 views
3

我面臨以下問題:我有一個數據庫索引1 {binaryColumn1,binaryColumn2}上的組合索引。我使用以下設置要使用的索引:多列索引搜索Microsoft.Isam.Esent

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。我無法更改索引或創建新索引。)這可能嗎?

謝謝

回答

1

你做了什麼會只爲{0x01, 0x00}工作。您無法通過一次通話來完成此操作,因爲第二列的值將會混合格子位SeekEQ

您可以做一個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