この質問では、Microsoft Indexing Services ( Dialect 2 ) と、C#/.NET プログラムのCisso.dll 相互運用ライブラリのIixssoQuery インターフェイスを使用しています。
インデックスにはvt_i8
データ型 (8 バイト)として定義された列がありますCreateRecordSet
が、相互運用ライブラリのメソッドは常に 4 バイト整数の数値列を持つ RecordSet を返し、2,147,483,648 の範囲制限を超えるものは切り捨てます。
理想的には、相互運用ライブラリから C# System.Int32 (4 バイトlong
) の代わりに C # System.Int64 (8 バイト) をプルする必要があります。int
次のコード サンプル (主にジョグ メモリに提供) は、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 相互運用ライブラリの制限なのか、それともより大きな整数値を取得できるのか、その方法がわからないだけなのかを知りたいです。
このあたりの誰かが同様の問題に遭遇したに違いないと確信しています。今回のインターネットのグーグル検索は、詳細が非常に不足しています。
インデックス内のデータに基づいて回避策を見つけました。別の文字列フィールドから必要なものを取得し、そこから数値を解析することができます。理想的ではありませんが、回避策です。