首页 > 解决方案 > EOF BOF 不一致.. 异常甚至 Recordset 的 RecordCount 也不止一个,仅在七台机器上的一台机器上

问题描述

我们有一个使用 .Net 4.7 作为 WebAPI 的应用程序,一些关键的业务逻辑在 VB6-COM 中。

ADODB 互操作 DLL 用于将记录集传递给 COM 对象以执行进一步的业务逻辑。

使用 SQL Server 2012R2。

下面是C#代码

Recordset recordSet;
recordSet = metaData.GetMetadata();
....
....
//This method adds two rows in iteration
FillDefaultTwoRows(recordSet); 

// COM object processes the recordset and this error out with EOF BOF
// even after having minimum one row in it.
dataManager.Process(recordSet);

在调用之前,dataManager.Process(recordSet);如果我们调用recordSet.MoveFirst()应用程序,请不要使用 EOF 出错,并且 BOF 是真的异常,否则它总是抛出 EOF BOF 是真的。

令人惊讶的是,七台机器中只有一台出现异常,我们检查 .net 版本、Windows 更新、IIS 中的工作池设置都相同。两台机器的连接字符串保持不变,ADODB、ADO 和 VBVM 版本都相同。

相同的代码部署在两台机器上,这是每台机器的日志

机器 A:收到的 ADODB.Recordset 有 BOF=False 和 EOF=False

机器 B:收到的 ADODB.Recordset 有 BOF=False 和 EOF=True

机器 B 面临异常,而机器 A 没有。

我们最大的问题是什么让这个记录位置被重置?

是否需要任何系统级别/全局配置或设置来解决此异常而无需更改代码?

标签: .netsql-server-2012comvb6adodb

解决方案


推荐阅读