2011-02-01 66 views
1

此问题使用来自C#/。NET程序的Cisso.dll互操作库的Microsoft Indexing ServicesDialect 2)和IixssoQuery interface微软索引服务Cisso.dll互操作库:4字节整数的上限?

有定义为vt_i8数据类型(8个字节)在我们的索引列然而互操作库的CreateRecordSet方法总是返回具有4个字节整数数值列一个记录,截断上述2147483648范围限制的任何。

理想情况下,我们需要拉C#long System.Int64(8字节)而不是C#int System.Int32(4字节)来自interop库。

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

我敢肯定,这里附近的人肯定会碰到类似的问题。这次搜索互联网的细节很短。


我们发现基于索引中的数据解决方法:我们能够拉动我们从另一个字符串场需要,并从中解析出号码。不理想,但是一种解决方法。

+0

你是否为Win2000客户端和早期写作?我问的原因是我注意到它被XP贬值。 – 2011-03-05 08:28:30

回答

0

是的,我卡在你身边。看起来最大的OLE DB列长度是32位(oledb.h)上的ULONG,但ixsso实现视为signed。我首先想到可以通过在VS的数据库连接中安装数据源来获取表格模式。那时我发现了搜索的“自定义”查询功能。这条路线非常多。

然后我试着走.net RCW到实现,但是我找不到ixsso.dll的调试符号,所以我无法获得足够小的asm块来诊断。

最好的猜测是DefineColumns(原始COM接口)功能正在限制底层模式存储的价值,并且你无能为力。这是你已经推断出来的原因,也是类似的原因。

祝你好运。对不起,我们无法破解这一点。我很高兴它的贬值,但....