最近幫學校做一個東西,大概兩天就弄出來一個,而且今天也上繳了,但是總是覺得有一些擔心。突然想測試測試,本來是想測試一下用二分法對數據進行選取的,但是,不知道怎么能得到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雙方控制的。在你沒有對指針記錄操作時,指針記錄是亂得,最好對數據操作時,先整理一下數據的排列,讓它能夠按序排列,方便以后操作。
|