我的一个ASP脚本有一个非常奇怪的问题。它是一个简单的脚本,将数据库中的信息读入记录集并循环遍历记录集,每次都将HTML作为表格行输出。
我遇到了一个问题,即周期性地接近每个循环的结束,它只是在没有通过所有记录集的情况下停止。我知道它正在停止,因为我生成的HTML只会跟记录集中的S或T一样远。该脚本没有崩溃,因为在每个循环的下面,我结束了该表,并且所有HTML仍然存在。
奇怪的是它被打破了一次刷新,然后下次我刷新它的工作 - SQL数据库中的数据是静态的,ASP脚本没有改变。一个负载它可以工作,下一个它可以破坏。
我不知道这里发生了什么,所以欢迎任何建议!
答案 0 :(得分:1)
我倾向于做的一件事是将SQL写入页面,以便我可以看到发生了什么。此外,将记录集的计数写入页面进行调试可能会有所帮助。
尝试使用以下内容:
const C_NO_DATA = "NO_DATA"
const C_ERROR = "ERROR"
const C_COL_IDENTIFIER = 0
const C_COL_ERROR_ID = 1
const C_COL_ERROR_MESSAGE = 2
const C_COL_SQL = 3
const C_COL_CONNECTION = 4
function GetDataSet(sqlString, connString)
'Initialise...
dim returnVal, rsData
on error resume next
'Define and open the recordset object...
set rsData = Server.CreateObject("ADODB.RecordSet")
rsData.Open sqlString, connString, 0, 1, 1
'Initialise an empty value for the containing array...
redim returnVal(0,0)
returnVal(0,0) = C_NO_DATA
'Deal with any errors...
if not rsData.EOF and not rsData.BOF then
'Store the data...
returnVal = rsData.GetRows()
'Tidy up...
rsData.close
set rsData = nothing
select case err.number
case 3021 'No data returned
'Do nothing as the initial value will still exist (C_NO_DATA)
case 0 'No error
'Do nothing as data has been returned
case else
redim returnVal(4,0)
returnVal(C_COL_IDENTIFIER,0) = C_ERROR
returnVal(C_COL_ERROR_ID,0) = err.number
returnVal(C_COL_ERROR_MESSAGE,0) = err.description
returnVal(C_COL_SQL,0) = sqlString
returnVal(C_COL_CONNECTION,0) = connString
end select
end if
on error goto 0
'Return the array...
GetDataSet = returnVal
end function
此例程将数据直接读入数组,以便您可以随意查看。
- 编辑 -
为了补充一点,我提供这样的代码的原因是一次性提取所有数据而不是循环开放数据库连接。