此问题使用来自C#/.NET程序的Microsoft 索引服务 (方言2)和IixssoQuery接口 of Cisso.dll互操作库。
我们的索引中有列被定义为vt_i8数据类型(8字节),但是互操作库的CreateRecordSet方法总是返回一个数字列为4字节整数的RecordSet,截断超过2,147,483,648个范围限制的任何内容。
理想情况下,我们需要从互操作库中提取C# long System.Int64 (8字节)而不是C# int System.Int32 (4字节)。
下面的代码示例(主要提供给jog内存)使用Cisso.dll获取记录集并填充DataTable,返回带有截断整数的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库的一个限制,或者是否可以从它中提取更大的整数值,而我们只是不知道如何做?
我相信这里肯定有人遇到过类似的问题。这一次在互联网上搜索的细节非常少。
我们已经根据索引中的数据找到了一个解决方案:我们能够从另一个字符串字段中提取所需的内容,并从中解析出数字。不是理想,而是一种解决办法。
发布于 2011-03-09 20:38:20
是的,我和你一样被困住了。看起来最大OLE DB列长度是32位(oledb.h)上的ULONG,但是ixsso实现将被视为签名。我最初认为可以通过在VS的数据库连接中挂载数据源来获得表模式。这时,我发现了搜索的“自定义”查询功能。这条路线到此为止了。
然后,我试着沿着.net RCW向下走到实现,但是我找不到ixsso.dll的调试符号,所以我无法得到一个足够小的asm块来诊断。
最好的猜测是,DefineColumns (原始COM接口)功能将值限制在底层模式存储区,而您对此无能为力。这就是你已经推断出来的,也是出于类似的原因。
祝好运。抱歉我们没能破解这个。我很高兴它贬值了..。
https://stackoverflow.com/questions/4858605
复制相似问题