我这里有个表46万条记录  我10秒钟要从里面取出50条记录上传给服务器 表以myid(自动编号)为索引
(然后update这个记录的sent字段)
我是这样写的rs.Open "select top 50 * from 09 where sent=0 order by myid", conn2, 3, 3
这样速度很慢  如果我这样写rs.Open "select top 50 * from 09 where sent=0",conn2,3,3 速度是快了但是传出去的ID号 是不连续的,id会跳(我估计这是数据库真正存放数据的顺序)
1\有什么办法让 它既是连续的发出去 而且速度不要太慢 (比如 我记住上次的ID然后只打开前面的50条)  
2\ 如果我就按rs.Open "select top 50 * from 09 where sent=0",conn2,3,3 取出数据等指针指向最后一条记录时候 下次再调用 rs.Open "select top 50 * from 09 where sent=0",conn2,3,3 它会不会把以前跳掉的记录 再找出来呢各位朋友我对数据库不是很懂  如果您有好办法 能否写下具体语句

解决方案 »

  1.   

    有时候,我们需要快速读取数据,并且不需要在内存中存储数据副本。还有些时候,我们要更新到数据库中的数据可能不是来自 DataSet,或者在将数据更新到数据库之前,不适于使用 DataSet 将数据放在内存中。
    读取数据时,我们可能只需找到数据并将其发送到其他位置,例如 Web 页、XML 文档或文本文件。在这些情况下,直接使用 DataReader 对象会更有效。
    参考:
    http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/usingadonet.mspx
      

  2.   

    楼上的是dataset datareader是.net 中概念吧。1\你的46万条记录是相对固定是吗? 要不这样试试:
        将你的select * from 09 order by myid  按MYID排xu写到一个新的表中去。
      再从这个表中取数据不就达到你的目的了吗? 2\如果我就按rs.Open "select top 50 * from 09 where sent=0",conn2,3,3 取出数据等指针指向最后一条记录时候 下次再调用 rs.Open "select top 50 * from 09 where sent=0",conn2,3,3 它会不会把以前跳掉的记录 再找出来呢
        ----------不会的。这样就是一个新的查询了。  如果你要这样的功能,你可以看看ado中的PageSize ,PageSize 的用法。
      

  3.   

    to  fredlin(fred)  
    我是把con.close   rs.close 都关掉 然后 再做rs.Open "select top 50 * from 09 where sent=0",conn2,3,3  那么第2个问题会解决吗
      

  4.   

    第二个问题,你看看下面ado中二个东东的用法
    rs.PageSize ,rs.Pagecount