最近帮学校做一个东西,大概两天就弄出来一个,而且今天也上缴了,但是总是觉得有一些担心。突然想测试测试,本来是想测试一下用二分法对数据进行选取的,但是,不知道怎么能得到last record and first record,所以,就想慢慢测试测试,怎么能得到last and first record,但是实际中的测试吓一大跳。asp数据集的有可能乱套。
以前,写asp读取数据时,总是用“select * from table”直接选取数据,然后用
if not rs.eof then
rs.movelast
do while not rs.bof then
response.write rs(“id“)
…..
loop
end if
简单的说就是用一个循环直接读取数据库所有数据,但是如果数据有几万条的话,速度是可想而知的了,所以想用二分法对数据进行选择显示,但是不知道怎么能得到开始和最后的数据,又想到了rs.bof rs.eof 本来是想怎么能得到字段id的最大值,最小值,然后好比较的,但是实际操作中发现,如果你用下面的东西,不一定得到最大值和最小值:
if not rs.bof then
rs.movefirst
frsid=rs("id")
end if
if not rs.eof then
rs.movelast
lstid=rs("id")
end if
do while not rs.bof
response.write "id is "&rs("id")&"
"
rs.moveprevious
loop
response.write "first id="&frsid&"
"
response.write "last id="&lstid&"
"
显示的frsid=6,lstid=15,可是在显示的全体数据中有一条数据的id为16,也就是说最大的id!=lstid(以前我总是认为这个是想等),最后检查发现是sql语句有问题,改成“select * from login order by id asc”时,显示:
id is 16
id is 15
id is 14
id is 13
id is 12
id is 11
id is 10
id is 8
id is 7
id is 6
first id=6
last id=16
将sql换成select * from login order by id desc”时,却是:
id is 6
id is 7
id is 8
id is 10
id is 11
id is 12
id is 13
id is 14
id is 15
id is 16
first id=16
last id=6
这样两个数据的排列完全和sql中要求的不一样(本来是asc的再显示的时候是desc,向desc的现实的确实asc的),而且显示出来的东西和login表中数据也完全不一样。
结论:数据的排列完全是靠sql和recordset双方控制的。在你没有对指针记录操作时,指针记录是乱得,最好对数据操作时,先整理一下数据的排列,让它能够按序排列,方便以后操作。
