zoukankan      html  css  js  c++  java
  • 小心数据集乱套

    最近帮学校做一个东西,大概两天就弄出来一个,而且今天也上缴了,但是总是觉得有一些担心。突然想测试测试,本来是想测试一下用二分法对数据进行选取的,但是,不知道怎么能得到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双方控制的。在你没有对指针记录操作时,指针记录是乱得,最好对数据操作时,先整理一下数据的排列,让它能够按序排列,方便以后操作。


    ?

  • 相关阅读:
    华为机考--约瑟夫问题
    华为机考--字符串压缩
    2014华为校招机考模拟--求最大递增数
    2014华为校招机考模拟--记票统计
    插入排序与归并排序的C#实现
    步入C#--hello world
    shell 命令用法
    About compiling some source code on centos
    ubuntu Install packages
    ssh命令
  • 原文地址:https://www.cnblogs.com/AloneSword/p/2237739.html
Copyright © 2011-2022 走看看