Служба индексирования Microsoft Cisso.dll - библиотека взаимодействия: верхний предел 4-байтовых чисел?

В этом вопросе используются службы Microsoft Indexing Services ( Dialect 2) и IixssoQuery библиотеки взаимодействия Cisso.dll из программы на C#/.NET.

В нашем индексе есть столбцы, определенные как vt_i8 тип данных (8 байт), однако CreateRecordSet Метод библиотеки взаимодействия всегда возвращает RecordSet, имеющий числовые столбцы из 4-х байтовых целых чисел, усекающие все, что превышает предел диапазона в 2 147 483 648.

В идеале нам нужно вытащить C# long System.Int64 (8 байт) вместо C# int System.Int32 (4 байта) из библиотеки взаимодействия.

В следующем примере кода (в основном предоставляемом для пробежек) используется Cisso.dll для получения набора записей и заполнения DataTable, возвращая данные с усеченными целыми числами.

CissoQueryClass cqc = new Cisso.CissoQueryClass();
RecordSet rs = new RecordSet();
cqc.Columns = "Rank, DocTitle, VPath, Filename, Characterization,Write";
// ... setup ...
var myDs = new DataSet();
oldDbAdapter.Fill(myDs, cqc.CreateRecordSet("nonsequential"), "IXResults");
return myDs;

Мы попробовали CQC. DefineColumn(..) метод, играющий с типами данных и т. д., но безрезультатно - никаких изменений в поведении усеченных целых не наблюдается.

Я хочу знать, является ли это целочисленное усечение ограничением библиотеки взаимодействия CISSO, или можно извлечь из него большие целочисленные значения, и мы просто не знаем, как это сделать?

Я уверен, что кто-то здесь столкнулся с подобной проблемой. Поиск в интернете на этот раз очень мал по деталям.


Мы нашли обходной путь на основе данных внутри индекса: мы можем извлечь то, что нам нужно, из другого строкового поля и проанализировать число из него. Не идеальный, но обходной путь.

1 ответ

Да, я застрял как ты. Кажется, что максимальная длина столбца OLE DB равна ULONG для 32-битного (oledb.h), но реализация ixsso обрабатывается как подписанная. Сначала я подумал, что могу получить схемы таблиц, смонтировав источник данных в соединениях с базой данных VS. Именно тогда я обнаружил "пользовательские" возможности поиска. Так много для этого маршрута.

Затем я попытался перейти к реализации.net RCW, но не смог найти символы отладки для ixsso.dll, поэтому не смог получить достаточно маленький блок asm для диагностики.

Наилучшим предположением является то, что функциональность DefineColumns (необработанный интерфейс COM) ограничивает значение базовым хранилищем схемы, и вы ничего не можете с этим поделать. Это то, что вы уже поняли, и по тем же причинам.

Удачи. Извините, мы не смогли взломать это. Я рад, что обесценился, хотя....

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