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

Posted

技术标签:

【中文标题】Microsoft 索引服务 Cisso.dll 互操作库:4 字节整数的上限?【英文标题】:Microsoft Indexing Service Cisso.dll interop library: upper limit of 4 byte integers? 【发布时间】:2011-06-19 00:28:13 【问题描述】:

本题使用来自 C#/.NET 程序的 Cisso.dll 互操作库的 Microsoft Indexing Services (Dialect 2) 和 IixssoQuery interface

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

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

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

我敢肯定附近有人遇到过类似的问题。这次在互联网上搜索非常缺乏细节。


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

【问题讨论】:

您是为 Win2000 和更早版本的客户端编写的吗?我问的原因是我注意到它在 XP 中被贬值了。 这是因为我们正在使用的产品 - Ektron ektron.com - 基于已弃用的技术,我们需要使用它。 这太糟糕了。我有一些细节,我正在寻找答案,但我需要创建一个 XP VM。它花费了相当多的空闲时间,但它是一个很好的益智游戏。 听起来很有希望。至少有 50 分处于危险之中,希望让努力工作变得值得。 您也尝试过 Cisso.CissoQueryExClass 吗? 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于Microsoft 索引服务 Cisso.dll 互操作库:4 字节整数的上限?的主要内容,如果未能解决你的问题,请参考以下文章

索引超出了数组界限(Microsoft.SqlServer.Smo)

怎么对Microsoft (Office) Word Document 2007 索引化?

索引超出了数组界限(Microsoft.SqlServer.Smo)

com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围

com.microsoft.sqlserver.jdbc.SQLServerException:索引 8 超出范围

java.sql.SQLException: [Microsoft][ODBC Driver Manager] 无效的描述符索引