首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微软索引服务Cisso.dll互操作库:4字节整数上限?

微软索引服务Cisso.dll互操作库:4字节整数上限?
EN

Stack Overflow用户
提问于 2011-02-01 03:31:16
回答 1查看 1.2K关注 0票数 1

此问题使用来自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。

代码语言:javascript
复制
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库的一个限制,或者是否可以从它中提取更大的整数值,而我们只是不知道如何做?

我相信这里肯定有人遇到过类似的问题。这一次在互联网上搜索的细节非常少。

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

EN

回答 1

Stack Overflow用户

发布于 2011-03-09 20:38:20

是的,我和你一样被困住了。看起来最大OLE DB列长度是32位(oledb.h)上的ULONG,但是ixsso实现将被视为签名。我最初认为可以通过在VS的数据库连接中挂载数据源来获得表模式。这时,我发现了搜索的“自定义”查询功能。这条路线到此为止了。

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

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

祝好运。抱歉我们没能破解这个。我很高兴它贬值了..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4858605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档