Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net ADODC.RecordSet.EOF未更新_Vb.net_Vb6_Adodb_Recordset_Vb6 Migration - Fatal编程技术网

VB.Net ADODC.RecordSet.EOF未更新

VB.Net ADODC.RecordSet.EOF未更新,vb.net,vb6,adodb,recordset,vb6-migration,Vb.net,Vb6,Adodb,Recordset,Vb6 Migration,在最后一个人离开后,我正在通过.NET迁移获得一个VB6项目。在程序中的某一点上,ADODC对象中包含的记录集使用标准而不是EOF循环进行循环(使用裸ADODB.recordset对象进行了多次循环,我已经让它们工作了)。然而,我发现当在ADODC对象中使用记录集时,EOF不会更新。下面是一个例子: 'VB6.ADODC adoEchelonMGT.ConnectionString = adoConnectionString() adoEchelonMGT.RecordSource = "sel

在最后一个人离开后,我正在通过.NET迁移获得一个VB6项目。在程序中的某一点上,ADODC对象中包含的记录集使用标准而不是EOF循环进行循环(使用裸ADODB.recordset对象进行了多次循环,我已经让它们工作了)。然而,我发现当在ADODC对象中使用记录集时,EOF不会更新。下面是一个例子:

'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类,我当前的命令是“昨天就开始工作”(最后一个家伙拖了后腿),所以虽然我知道我在将来的某个时候必须切断连接系统,这不在我要做的修复范围内。

直截了当地说:属性窗口:

更多详细信息:

有一个MS参考资料值得一读:-见备注部分

您的帖子中没有包含连接字符串,因此也请检查它,因为Recordcount、EOF和BOF的正确使用也取决于光标类型

在某些情况下,RecordCount返回-1(此外,遗憾的是,这可能因OLEDB提供程序而异),因此无法检查记录是否存在。使用记录集的RecordCount属性需要使用:

  • 静态或键集服务器端游标
  • 客户端游标
  • 为什么同时检查EOF和BOF?

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


    这意味着:在属性窗口中检查完BOF和EOF操作后,还要注意如何同时签入EOF、BOF和Recordcount的代码。

    如果只有一条记录,则不需要while循环。一个简单的IF就可以了。另外,如果块看起来不必要,那么首先要做的是,我不知道它运行时会有多少条记录,在我的示例中,一个生产数据库中可能有几十条记录。第一行只是处理在这些线程中被问到的一些常见问题(我看了一些有类似问题的人,但他们的解决方案都不适合我)。你在循环中做了什么吗?或者只是尝试获取最后一条记录?在实际代码中,我根据用户输入检查特定数据。我提供的代码是一个精简的示例,可以删除尽可能多的变量。但是,提供的代码仍然会导致我遇到的问题。首先要做的是去掉IF语句。While将处理这个问题。这就是问题所在,EOF操作是最后一次移动,而不是保持EOF。我改变了这一点,现在它可以正常工作了。