当没有下一个记录集时,ASP ADO recordset.NextRecordset()会中断

时间:2015-02-14 17:04:51

标签: javascript asp-classic ado recordset

我用ASP编写ASP脚本,我需要遍历不确定数量的记录和记录集。循环浏览各个记录没有问题。当我需要通过记录集时,问题就出现了。只要有另一个记录集,它就可以正常工作。如果没有更多记录集,代码就会死掉,似乎无法检查或捕获错误。我已经完成了try / catch块以及我能想到的每个测试,但代码只是中断并给出了内部服务器错误。我希望有一个我失踪的isNextRecordset()isLastRecordset()函数。

我当前的代码

do{
    //Some Code Stuff

    record = record.NextRecordset();  //Dies here when no more recordsets

}while(!!record);

使用普通的VBScript,他们会显示此方法有效(但从未尝试过)。但我不想使用VBScript。

VBScript代码

Do Until record = Nothing

   set record = record.NextRecordset
Loop

编辑: 我相信我通过添加循环使事情变得混乱,如果你删除循环并且在没有下一个记录集时只调用nextrecordset,它仍然会死掉。无需测试null。我的代码没有进行null测试。

//Get A recordset
//There is only one recordset
record = cmd.Execute();

//Do some stuff with the record set

//Call NextRecordset
//even though there are no more
record = record.NextRecordset();  //<--- Still Dies right here 

编辑: 只是想指出我遇到的隐藏问题。下面的答案是正确的,但不是我的实际问题。我看到的一些教程显示了如下结构。关闭记录和连接。但是当record达到最低点时,它已经null,这是一个问题。这很容易通过显示正确的错误消息来解决,这是我没有的。我自己的愚蠢,但可能会帮助别人。

try{

   //Do Some Stuff

   record = record.NextRecordset();

   //Test Record set  

}catch(e){

}finally{
    record.Close();  <---- This is where it was actually having a problem. 
    record = null;
    myconn.Close();
    myconn = null;
}

1 个答案:

答案 0 :(得分:1)

正确的语法是:

while (record) {
    //Some Code Stuff

    record = record.NextRecordset();
}

这样,当NextRecordset()将返回null时,循环将停止。