2011-02-01 2 views
1

この質問は、C#/ .NETプログラムののCisso.dll interopライブラリのIndexing ServicesDialect 2)とIixssoQuery interfaceを使用しています。MicrosoftインデックスサービスCisso.dll interop library:4バイト整数の上限?

vt_i8データ型(8バイト)として定義され、Googleのインデックス内のカラムがあります。しかし、相互運用ライブラリのCreateRecordSet方法は常に2147483648範囲限界を超えるものを切り捨て、4つのバイトの整数の数値列を持つレコードセットを返します。

理想的には、interopライブラリからC#int System.Int32(4バイト)の代わりにC#long System.Int64(8バイト)を引き出す必要があります。

(主記憶を呼び起こすために提供される)以下のサンプルコードは、切り捨てられた整数とのデータテーブルを返す、レコードセットを取得し、データテーブルを埋めるためにCisso.dllを使用します。

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 interopライブラリの制限であるか、より大きな整数値を引き出すことができ、それを行う方法がわからない場合は知りたいですか?

私はここの周りの誰かが同様の問題に遭遇している必要があります確信しています。今回はインターネットを詳しく調べるのは非常に短いです。


我々は、インデックス内のデータに基づいて、回避策を発見した:私たちは別の文字列フィールドから必要なものを引き出し、それからの数を解析することができます。理想的ではありませんが、回避策です。

+0

あなたは以前のWin2000クライアント用に書いていますか?私が尋ねる理由はこれがXPで償却されたことに気付いたことです。 –

+0

私たちが使用している製品(Ektron http://www.ektron.com/)は廃止予定の技術をベースにしており、対応する必要があるからです。 –

+0

それは吸う。私はいくつかの詳細を持っており、答えに取り組んでいますが、私はXP VMを作成する必要がありました。それは自由時間のかなりのビットを取ったが、その良い困惑。 –

答えて

0

いや、私はあなたがそうであるようにこだわっています。最大OLE DB列の長さが32ビット(のoledb.h)にULONGあるが、署名されたようにIXSSO実装扱うように思えます。最初に、VSのデータベース接続にデータソースをマウントすることで、テーブルスキーマに入ることができると思いました。それは私が検索の "カスタム"クエリ機能を発見したときです。そのルートのためにはそんなに。

私はRCWを実装まで歩いてみましたが、ixsso.dllのデバッグシンボルを見つけることができませんでしたので、診断するのに十分なサイズのasmブロックを取得できませんでした。

DefineColumns(生のCOMインターフェイス)機能は、基礎となるスキーマストアに値を限定していることと、それに対して何もできないことが最も良い推測です。あなたがすでに推測していたものと同様の理由からです。

幸運。申し訳ありません。私はそれが償却されてうれしいよ....