VB.Net ADODC.RecordSet.EOF 没有更新

VB.Net ADODC.RecordSet.EOF not updating

在最后一个人离开后,我正在努力通过 .NET 迁移获得一个 VB6 项目。在程序中的某个时刻,使用标准的 While Not EOF 循环循环遍历包含在 ADODC 对象中的记录集(这是使用裸 ADODB.RecordSet 对象多次完成的,我已经使它们起作用)。但是,我发现在 EOF 不更新的 ADODC 对象中使用 RecordSet 时。这是一个例子:

'VB6.ADODC
adoEchelonMGT.ConnectionString = adoConnectionString()
adoEchelonMGT.RecordSource = "select * from EchelonMGT"
adoEchelonMGT.Refresh()

If (Not adoEchelonMGT.Recordset.EOF And Not adoEchelonMGT.Recordset.BOF And adoEchelonMGT.Recordset.RecordCount > 0) Then
    While Not adoEchelonMGT.Recordset.EOF
        adoEchelonMGT.Recordset.MoveNext()
    End While
End If

代码会进入while循环,永不离开。记录集中只有一条记录,但 EOF 永远不会设置为 True。

所以最后一点:是的,我知道我应该更改我的数据库连接以使用完整的 .NET 类,我当前的订单是 "make this work yesterday"(最后一个人拖着脚)所以当我我知道在未来的某个时候我将不得不破坏连接系统,这不在我要解决这个问题的范围内。

开门见山:属性Window:

更多详情:

有一个 MS 参考值得一读:BOF, EOF Properties (ADO) - 请参阅 备注 部分。

您还没有在您的 post 中包含连接字符串,因此也请检查一下,因为 Recordcount、EOF 和 BOF 的正确使用还取决于游标类型。

In some cases RecordCount returns -1 (moreover, sadly, this may vary depending from the OLEDB Provider), so it is not usable to check for existence of records. The use of the Recordset's RecordCount property requires either the use of:

  1. Static or Keyset server-side cursors
  2. A client-side cursor

为什么要同时检查EOF和BOF?

均为真:没有记录,也没有当前记录,每个 MoveAction 都会引发可捕获的错误。

这意味着:在勾选属性中的BOFAction和EOFFAction后Window,还要注意如何同时勾选EOF、BOF和Recordcount的代码