小心数据集乱套
【
信息来源】 发布日期:
5-8 10:30:00 文章分类:财经资讯
最近帮学校做一个东西,大概两天就弄出来一个,而且今天也上缴了,可是总是觉得有一些担忧。突然想测试测试,原本是想测试一下用二分法对数据进行选取的,可是,不晓得怎么能得到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双方控制的。在你没有对指针记录操作时,指针记录是乱得,最好对数据操作时,先整理一下数据的排列,让它能够按序排列,方便以后操作。