1

此问题使用来自 C#/.NET 程序的Cisso.dll 互操作库的 Microsoft索引服务方言 2)和IixssoQuery 接口。

在我们的索引中有定义为vt_i8数据类型(8 字节)的列,但是CreateRecordSet互操作库的方法总是返回一个 RecordSet,它具有 4 字节整数的数字列,截断超过 2,147,483,648 范围限制的任何内容。

理想情况下,我们需要从互操作库中提取 C# longSystem.Int64(8 字节)而不是 C# System.Int32(4 字节)。int

以下代码示例(主要提供给 jog memory)使用 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 互操作库的限制,或者是否可以从中提取更大的整数值而我们只是不知道该怎么做?

我敢肯定,这里的某个人一定遇到过类似的问题。这次在互联网上搜索非常缺乏细节。


我们根据索引中的数据找到了一种解决方法:我们能够从另一个字符串字段中提取我们需要的内容并从中解析出数字。不理想,但一种解决方法。

4

1 回答 1

0

是的,我和你一样被困住了。似乎最大 OLE DB 列长度是 32 位(oledb.h)上的 ULONG,但 ixsso 实现将其视为已签名。我首先认为我可以通过在 VS 的数据库连接中安装数据源来获取表模式。那时我发现了搜索的“自定义”查询功能。这条路线就这么多。

然后,我尝试将 .net RCW 向下执行,但我找不到 ixsso.dll 的调试符号,因此我无法获得足够小的 asm 块来诊断。

最好的猜测是 DefineColumns(原始 COM 接口)功能将值限制在底层模式存储中,并且您对此无能为力。这是您已经推断出的,并且出于类似的原因。

祝你好运。抱歉,我们无法破解这个。不过我很高兴它贬值了....

于 2011-03-09T20:38:20.623 回答