不会吧,没人知道?
  我是想完成像PL/SQL Developer类似功能,用这个工具查找数据时不会一次性完全显示,它可以让用户根据需要进行翻页显示

解决方案 »

  1.   

    试试存储过程,用Repeater分页,
    设置4个图片按钮(第一页,上一页,下一页,最后一页),
    每个按钮上设置不同的oncommand事件,
    然后分别写4个处理程序,每个程序的最后关闭DataReader,关闭CONN(连接)看行不。
      

  2.   

    DataGrid分页或者select top 15 * from T01 where id > flag  //flag记录上一次最大的ID值
      

  3.   

    To:楼上朋友
      很感谢你们的关注,但我认为你们的方法应该不是完美的解决方案。  不知各位是否使用过PL/SQL Developer,当你发出一个查询语句后,不是显示全部,而是先显示最前面的几条记录,再显示两个按钮“Fetch next page”,“Fetch last page”,这样可以做到很友好的效果
      

  4.   

    select top 10 *
    from T015万条也算多?
    一张表200个字段,一年3亿6千万条数据,很爽吧。如果你想找31~40条数据可以这样写:
    select top 10 *
    from(select top 40 *
    from T01)
      

  5.   

    抱歉,少了句代码。
    select top 10 *
    from (select top 40 *
    from T01
    order by ID desc)先找出头40条,倒序排列,再在这40条倒序排列的数据里找出头10条。
      

  6.   

    建议使用分页的存储过程。
    CREATE proc page
    @pagenum int
    as
    SET NOCOUNT ON /*-----这一句很重要哦:)),不然它只会认 insert #change......这个数据集:))*/
    declare @sql nvarchar(500) --声明动态sql执行语句
    declare @pagecount int --当前页数--取得当前数据库的记录总数
    declare @row_num int 
    begin 
    select @row_num=count(*) from cat_list--创建临时表,作为数据过滤
    create table #change (T_id int)--判断当前页数
    if @row_num>6 --大于页面显示记录数,则分页
    begin
    set @row_num=@pagenum*6if @row_num=6
    select top 6 * from cat_list
    else
    begin
    set @row_num=(@pagenum-1)*6
    set @pagecount=@row_num
    set @sql=N'insert #change (T_id) select top '+cast(@pagecount as char(100))+' T_id from cat_list where T_id not in (select T_id from #change)'
    exec sp_executesql @sql
    select top 6 * from cat_list where T_id not in (select T_id from #change)
    end
    end
    else --只现实全部的数据
    select * from cat_list
    end
    GO
    客户端这样调用:
    <!--#include file="conn.asp"-->
    <!--#include file="adovbs.inc"-->
    <% dim T_com 
    dim T_rs'declare datamanage recordset
    dim parameters
    set T_com=server.createobject("adodb.command")
    T_com.ActiveConnection=conn
    T_com.CommandText="page"
    T_com.CommandType=adCmdStoredProc 
    'T_com.Prepared=true
    set parameters=T_com.CreateParameter("@pagenum",adInteger,adParamInput)
    T_com.Parameters.Append parameters
    dim page
    page=request.QueryString("page")
    if page="" then
    page=1
    end if
    T_com("@pagenum")=page
    set T_rs=T_com.Executedo while not T_rs.eof 
    response.Write T_rs("c_name")
    T_rs.movenext
    loop
    %>
    <a href="a.asp?page=<%=page+1%>">ddddd</a>
      

  7.   

    To:daou101(海天一鸥)
       你的方法不知道对执行效率如何。
       但我看出你的存储过程有一个问题,(取出当前数据表的记录总数),你是取出了整个表,但如果用户输入的SQL是带条件参数,就不知道其中的记录数了。当然也可以执行用户的SQL后得到记录数,但效率会大大降低
      

  8.   

    第X页,每页15条
    如果表中记录不重复的字段,可以用下面的方法,当然(x-1)*15要换成具体的数字,不能用变量:
    select top 15 * from tableName where 不重复的字段 not in(select top (x-1)*15 主键 from tableName)如果表中无主键,可以用临时表,加标识字段解决.这里的x可以用变量.select id=identity(int,1,1),*  into #tb from 表
    select * from #tb where id between (x-1)*15 and x*15-1
      

  9.   

    各位朋友:
       我的想法是将用户Select 语句一次执行,但显示却是分批,这样的效率应该会高一些。
       但不知道怎样实现?
       不一定限制在SQL语句上,也可以使用DoNet,只要能做到。
      

  10.   

    有一个比较简单的方法
    做一个全局的数据集和全局的数据连线
    每次读N条记录出来显示,游标移动N条
    记录(包括上下)
    如果是数据绑定的话就不合适了
    那只能用Procedure了。
      

  11.   

    看看DataGrid的分页功能可能对你有所帮助
      

  12.   

    To:leogigi()  & 13880079673(CMonkey) 
       我要的效果不一定要在DataGrid中体现的,可以输出在文本框或其它地方。我想要的是一种解决方案。
       但还是很感谢你们的意见!
      

  13.   

    使用Select top 10 * 之类的语句应该不合要求了,在Oracle中是不支持这样的语法的(取而代之用rownum关键字)
      但还没有好的解决方案
      

  14.   

    先把你的表读到一个DataTable里面(同时增加一列自增字段serno),你就可以从这样Table里面读出任意行得的数据
      

  15.   

    建议用分页的存储过程, daou101(海天一鸥)说得挺不错.
      

  16.   

    试试"戏子"说的:select top 15 * from T01 where id > flag  //flag记录上一次最大的ID值
      

  17.   

    用repeater分页,要用到存储过程,在存储过程里通过条件查询。