Microsoft Indexing Service Cisso.dll interop library: upper limit of 4 byte integers?

1.1k views Asked by At

This question uses Microsoft Indexing Services (Dialect 2) and IixssoQuery interface of the Cisso.dll interop library from a C#/.NET program.

There are columns in our index defined as the vt_i8 data type (8 bytes) however the CreateRecordSet method of the interop library always returns a RecordSet having numeric columns of 4 byte integers, truncating anything above the 2,147,483,648 range limit.

Ideally we need to pull C# long System.Int64 (8 bytes) instead of C# int System.Int32 (4 bytes) from the interop library.

The following code sample (mainly provided to jog memories) uses Cisso.dll to get a recordset and fill a DataTable, returning the datatable with truncated integers.

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;

We tried the cqc.DefineColumn(..) method, playing with data types, etc. but to no avail - no change is seen in behaviour of truncated integers.

I want to know if this integer truncation is a limitation of the CISSO interop library, or if larger integer values can be pulled from it and we just don't know how to do it?

I'm sure somebody around here must have run into a similar issue. Googling the Internet this time around is very short on detail.


We have found a workaround based on the data inside the index: we're able to pull what we need from a another string field and parse out the number from it. Not ideal but a workaround.

1

There are 1 answers

0
Ritch Melton On

Yea, I'm stuck as you are. It seems like the max OLE DB column length is a ULONG on 32 bit(oledb.h), but the ixsso implementation treats as signed. I first thought I could get at the table schemas by mounting the datasource in the Database Connections of VS. That's when i discovered the "custom" query capabilities of the search. So much for that route.

I then tried walking the .net RCW down to the implementation, but I couldn't find debug symbols for the ixsso.dll, so I couldn't get a small enough asm block to diagnose.

The best guess is that the DefineColumns (raw COM interface) functionality is limiting the value to the underlying schema store, and that there's nothing you can do about it. Which is what you'd already deduced, and for similar reasons.

Good luck. Sorry we couldn't crack this. I'm glad its depreciated though....