资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

用DataGrid实现分页查询大量数据

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

想要查询100多万条记录,用DataGrid怎样做好分页呀,这里不能一次性把记录都取出来的,因为数据太多了。  
      高手帮忙呀!

网友回答:

发表者:czhenq

最好是使用存储过程进行分页  
   
  到sql   server版找找,肯定有。

发表者:iamknight

这样不好吧,觉得太占内存了否则,缓存到硬盘上效率也不见得好。

发表者:wangrenda

存储过程.  
  也可用分页控件  
  AspNetPager

发表者:zpisgod

一个简单的存储过程,用的临时表法  
   
   
   
  CREATE   PROCEDURE   page_res  
  (  
          @targettable   nvarchar(50),   --目标表、视图..  
          @key   nvarchar(50),     --关键字段  
          @swhere   nvarchar(4000),   --查询条件  
          @pageSize   int,   --每页显示记录条数  
          @pageIndex   int,   --要显示第几页  
          @allnum   int   output  
           
  )  
  AS  
  set   nocount   on  
              begin  
                          create   table   #t(id   int   identity(1,1),username   nvarchar)  
                          declare   @PageLowerBound   int  
                          declare   @PageUpperBound   int  
  declare   @table   nvarchar(4000)  
  --declare   @spnum     int  
  set   @table=Nselect   @num=count(*)   from   +@targettable   +@swhere            
  exec   sp_executesql   @table,  
  N@num   int   output,  
  @allnum     output  
   
                          set   @PageLowerBound=(@pageIndex-1)*@pageSize  
                          set   @PageUpperBound=@PageLowerBound+@pageSize  
                          set   rowcount   @PageUpperBound  
  set   @table=Ninsert   into   #t(username)     select   +@key+N     from       +@targettable   +@swhere                
    exec   sp_executesql   @table  
   
  set   @table=Nselect   R.*   from   +@targettable+N     R,#t   t   where   R.+@key+N=t.username                          
   
           
  +N   and   t.id>+cast(@PageLowerBound   as   nvarchar(30))+N   and   t.id<=+cast(@PageUpperBound        
   
  as   nvarchar(30))              
                          exec   sp_executesql   @table  
  select   @allnum  
                                          set   rowcount   0  
              end                                        
   
  set   nocount   off  
   
  GO  
 

发表者:zpisgod

调用试例  
  SqlConnection   sconn=new   SqlConnection(conn); //建立连接  
  SqlCommand   scomm=new   SqlCommand();  
  scomm.Connection=sconn;  
  scomm.CommandText="page_res";   //存储过程名称  
  scomm.CommandType=CommandType.StoredProcedure;//command为存储  
  //过程----下面为添加各种参数---  
  SqlParameter   sp=new   SqlParameter("@targettable",SqlDbType.NVarChar,50);  
  sp.Direction=ParameterDirection.Input;  
  sp.Value="qyml";  
  scomm.Parameters.Add(sp);  
  sp=new   SqlParameter("@key",SqlDbType.NVarChar,50);  
  sp.Direction=ParameterDirection.Input;  
  sp.Value="id";  
  scomm.Parameters.Add(sp);  
  sp=new   SqlParameter("@swhere",SqlDbType.NVarChar,4000);  
  sp.Direction=ParameterDirection.Input;  
  sp.Value="   where   1=1   ";  
  scomm.Parameters.Add(sp);  
  sp=new   SqlParameter("@pwhere",SqlDbType.NVarChar,4000);  
  sp.Direction=ParameterDirection.Input;  
  sp.Value="   where   1=1   ";  
  scomm.Parameters.Add(sp);  
  sp=new   SqlParameter("@pageSize",SqlDbType.Int);  
  sp.Direction=ParameterDirection.Input;  
  sp.Value=5;  
  scomm.Parameters.Add(sp);  
  sp=new   SqlParameter("@pageIndex",SqlDbType.Int);  
  sp.Direction=ParameterDirection.Input;  
  sp.Value=pageindex;  
  scomm.Parameters.Add(sp);  
  sp=new   SqlParameter("@allnum",SqlDbType.Int);  
  sp.Direction=ParameterDirection.Output;  
  sp.Value=0;  
  scomm.Parameters.Add(sp);  
  SqlDataAdapter   sda=new   SqlDataAdapter(scomm);//声明数据适配器  
  DataSet   ds=new   DataSet();  
  sda.Fill(ds,"coms");//   用存储过程返回的行填充dataset  
  coms.DataSource=ds.Tables[0].DefaultView;  
  coms.DataBind();//将数据绑定到datagrid上面

发表者:athossmth

有一个别人写的xml的htc,要的话msg我你的email

发表者:happyjun2000

顶,接点分^_^  
  无聊就接分来了

发表者:zhzuo

http://blog.csdn.net/zhzuo/archive/2004/10/29/158638.aspx

发表者:cancersyf

使用存储过程分页,每次只获取需要的数据。

发表者:cancersyf

参考--  
   
  http://blog.csdn.net/yzx110/archive/2004/08/18/78525.aspx

发表者:look4sword

存储过程我不太懂,应该可以。我知道的就是用SQL分。

发表者:Bmonkey

存储过程,李洪根测试过,不要使用临时表  
  用获取上一页最后一条数据id,然后select   这一页的数据   id+1   到id+1+pagesize  
 

发表者:lhcoolhacker

----------------------------------------------------  
  --   分页  
  ----------------------------------------------------  
  CREATE   PROCEDURE   GetRecords  
          @tblName       VARCHAR(255), --   表名  
          @fldName       VARCHAR(255), --   字段名  
          @strFields   VARCHAR(5000)   =   *,                   --   获取的字段字符串  
          @PageSize     INT   =   10,                   --   页尺寸  
          @PageIndex   INT   =   0, --   页码   (从0开始)  
          @OrderType   BIT   =   0, --   设置排序类型,   非   0   值则降序  
          @strWhere     VARCHAR(1000)   =                     --   查询条件   (注意:   不要加   where)  
  AS  
   
          DECLARE   @strSQL             VARCHAR(8000) --   主语句  
          DECLARE   @strCountSQL   VARCHAR(2000) --   统计总记录数语句  
          DECLARE   @strTmp             VARCHAR(1000) --   临时变量  
          DECLARE   @strOrder         VARCHAR(1000) --   排序类型  
          DECLARE   @fldInName       VARCHAR(255) --   内层字段名  
          DECLARE   @prefix             INT --   字段名前缀位置  
          DECLARE   @fldNameLen     INT --   字段名长度  
   
          SET   NOCOUNT   ON  
   
          SET   @prefix   =   CHARINDEX(".",   @fldName)  
   
          --   判断字段名是否含有前缀  
          IF   @prefix   >   0  
          BEGIN  
                  SET   @fldNameLen   =   LEN(@fldName)  
                  SET   @fldNameLen   =   @fldNameLen   -   @prefix  
                  SET   @prefix   =   @prefix   +   1  
          SET   @fldInName   =   SUBSTRING(@fldName,   @prefix,   @fldNameLen)  
          END  
          ELSE  
                  SET   @fldInName   =   @fldName  
   
          --   是否降序排序  
          IF   @OrderType   <>   0  
          BEGIN  
                  SET   @strTmp   =   "   <(SELECT   MIN"  
                  SET   @strOrder   =   "   ORDER   BY   "   +   @fldName   +"   DESC"  
          END  
          ELSE  
          BEGIN  
                  SET   @strTmp   =   "   >(SELECT   MAX"  
                  SET   @strOrder   =   "   ORDER   BY   "   +   @fldName   +"   ASC"  
          END  
           
          --   是否为第一页  
          IF   @PageIndex   =   0  
          BEGIN  
                  SET   @strTmp   =   ""  
   
                  IF   @strWhere   <>    
                          SET   @strTmp   =   "   WHERE   ("   +   @strWhere   +   ")"  
   
                  SET   @strSQL   =   "SELECT   TOP   "   +   STR(@PageSize)   +   "   "   +   @strFields   +   "   FROM   "   +   @tblName   +   @strTmp   +   "   "   +   @strOrder  
          END  
          ELSE  
          BEGIN  
                  IF   @strWhere   <>    
                          SET   @strSQL   =   "SELECT   TOP   "   +   STR(@PageSize)   +   "   "   +   @strFields   +   "   FROM   "  
                                  +   @tblName   +   "   WHERE   "   +   @fldName   +   @strTmp   +   "(["   +   @fldInName   +   "])   FROM   (SELECT   TOP   "  
                                  +   STR(@PageIndex   *   @PageSize)   +   "   "   +   @fldName   +   "   FROM   "   +   @tblName   +   "   WHERE   ("   +   @strWhere   +   ")   "  
                                  +   @strOrder   +   ")   AS   tblTmp)   AND   ("   +   @strWhere   +   ")   "   +   @strOrder  
                  ELSE  
                          SET   @strSQL   =   "SELECT   TOP   "   +   STR(@PageSize)   +   "   "   +   @strFields   +   "   FROM   "  
                                  +   @tblName   +   "   WHERE   "   +   @fldName   +   @strTmp   +   "(["   +   @fldInName   +   "])   FROM   (SELECT   TOP   "  
                                  +   STR(@PageIndex   *   @PageSize)   +   "   "   +   @fldName   +   "   FROM   "   +   @tblName   +   @strOrder   +   ")   AS   tblTmp)"  
                                  +   @strOrder  
          END  
   
          --   统计总记录数  
          SET   @strTmp   =   ""  
   
          IF   @strWhere   <>    
                  SET   @strTmp   =   "   WHERE   ("   +   @strWhere   +   ")"  
   
          SET   @strCountSQL   =   "SELECT   COUNT("   +   @fldName   +   ")   AS   Total   FROM   "   +   @tblName   +   @strTmp  
   
          EXEC   (@strSQL)  
          EXEC   (@strCountSQL)  
   
          RETURN   0


 

 
热门推荐笔记本: IBM笔记本
相关文章:
笔记本相关:
IT技术文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved