分页

Posted on 2007-07-06 09:58  Viviwei  阅读(180)  评论(0)    收藏  举报
存储过程
/*
 名称:spAll_ReturnRows
 输入:
 输出:
 调用:
  EXEC spAll_ReturnRows 'SELECT  * FROM 表名', 页号, 返回记录数, '主键', '排序字段'
  spAll_ReturnRows 'SELECT  * FROM all_Categories',2,10,'[ID]','[ID]'
 说明:[百万级]通用存储过程.分页存储过程..返回指定返回条数、指定页数的记录
 作者:Dili J.F. Senders
  邮件:diliatwellknow.net
  网站:http://www.wellknow.net
  更新:20040610
  支持:http://bbs.wellknow.net
  版权:转述时请注明来源:用思维创造未来的Wellknow.net
*/


CREATE PROCEDURE dbo.spAll_ReturnRows
(
 
@SQL nVARCHAR(4000),
 
@Page int,
 
@RecsPerPage int,
 
@ID VARCHAR(255),
 
@Sort VARCHAR(255)
)
AS

DECLARE @Str nVARCHAR(4000)

SET @Str='SELECT   TOP '+CAST(@RecsPerPage AS VARCHAR(20))+' * FROM ('+@SQL+') T WHERE T.'+@ID+' NOT IN 
(SELECT   TOP 
'+CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+' '+@ID+' FROM ('+@SQL+') T9 ORDER BY '+@Sort+') ORDER BY '+@Sort

PRINT @Str

EXEC sp_ExecuteSql @Str
GO
分页
 1 ///   <summary>   
 2  ///   返回用于分页的HTML文本   
 3  ///   </summary>   
 4  ///   <param   name="recordCount">记录总条数</param>   
 5  ///   <param   name="pageSize">每页大小</param>   
 6  ///   <param   name="currPage">当前页</param>   
 7  ///   <returns>返回HTML文本</returns>   

 8  public   static   string   GetPaperHtml(int   recordCount,int   pageSize,int   currPage)   
 9  {   
10  System.Text.StringBuilder   result=new   System.Text.StringBuilder("");   
11  int   pageOfBlock=10//每块可以放几页   
12  int   maxPage=(recordCount+pageSize-1)/pageSize; //一共分多少页   
13  int   maxBlock=(maxPage+pageOfBlock-1)/pageOfBlock; //共有多少块   
14  int   currBlock=(currPage+pageOfBlock-1)/pageOfBlock; //当前是第几块   
15  int   nextPage=currPage+1//下一页的页数   
16  int   previousPage=currPage-1//前一页的页数   
17  int   nextBlockFirst=currBlock*pageOfBlock+1//下一块的第一页   
18  int   previousBlockLast=(currBlock-1)*pageOfBlock; //上一块的第一页   
19  //如果是第一页,则上一页和最前一页的链接无效   
20  if   (currPage>1)   
21  {   
22  string   href="SIndex.aspx?TextSearch=\"+escape('"+TextSearch+"')+\"&DropSearch="+ASearch+"&page=1";   
23  result.Append("<a   title='首页'   href='"+href+"'><font   face='webdings'>9</font></a>&nbsp;&nbsp;");   
24  href="SIndex.aspx?TextSearch=\"+escape('"+TextSearch+"')+\"&DropSearch="+ASearch+"&page="+(--pageIndex);   
25  result.Append("<a   title='上一页'   href='"+href+"'><font   face='webdings'>3</font></a>&nbsp;&nbsp;");   
26  }
   
27  else   
28  {   
29  result.Append("<a   disabled='true'><font   face='webdings'>9</font></a>&nbsp;&nbsp;");   
30  result.Append("<a   disabled='true'><font   face='webdings'>3</font></a>&nbsp;&nbsp;");   
31  }
   
32  //如果是不是一块,则加上一个返回上一块的链接   
33  if   (currBlock>1)   
34  {   
35  string   href="SIndex.aspx?TextSearch=\"+escape('"+TextSearch+"')+\"&DropSearch="+ASearch+"&page="+previousBlockLast.ToString();   
36  result.Append("<a   title='前十页'   href='"+href+"'></a>&nbsp;");   
37  }
   
38  //循环每一页   
39  if   (maxPage!=0)   
40  {   
41  //如果下一块的第一页大于最大页,则这一块的结束页索引为最大页,否则为下一块的第一页减1.   
42  int   endPage   =   (nextBlockFirst   >   maxPage)   ?   maxPage   :   nextBlockFirst   -   1;   
43  for   (int   i=previousBlockLast+1;i<=endPage;i++)   
44  {   
45  if   (i==currPage)   
46  {   
47  result.Append("<font   color='Red'>-<b>"   +   i.ToString()   +   "</b>-</font>&nbsp;");   
48  }
   
49  else   
50  {   
51  string   href="SIndex.aspx?TextSearch=\"+escape('"+TextSearch+"')+\"&DropSearch="+ASearch+"&page="+i.ToString();   
52  result.Append("<a   title='第"   +   i.ToString()   +"页'   href='"+href+"'>[&nbsp;"   +   i.ToString()   +   "&nbsp;]</a>&nbsp;");   
53  }
   
54  }
   
55  }
   
56  //如果不是最后一块,则加上一个指向下一块的链接   
57  if   (currBlock<maxBlock)   
58  {   
59  string   href="SIndex.aspx?TextSearch=\"+escape('"+TextSearch+"')+\"&DropSearch="+ASearch+"&page="+nextBlockFirst.ToString();   
60  result.Append("<a   title='后十页'   href='"+href+"'></a>&nbsp;&nbsp;");   
61  }
   
62  //如果是最后一页或者记录数为零,则下一页及最后一页的链接无效   
63  if   (currPage!=maxPage   &&   recordCount!=0)   
64  {   
65  pageIndex++;   
66  string   href="SIndex.aspx?TextSearch=\"+escape('"+TextSearch+"')+\"&DropSearch="+ASearch+"&page="+(pageIndex);   
67  result.Append("<a   title='下一页'   href='"+href+"'><font   face='webdings'>4</font></a>&nbsp;&nbsp;");   
68  int   count=0;   
69  if(int.Parse(PLDs.Tables[0].Rows[0][7].ToString())%10==0)   
70  {   
71  count=int.Parse(PLDs.Tables[0].Rows[0][7].ToString())/10;   
72  }
   
73  else   
74  {   
75  count=int.Parse(PLDs.Tables[0].Rows[0][7].ToString())/10+1;   
76  }
   
77  pageIndex=count;   
78  href="SIndex.aspx?TextSearch=\"+escape('"+TextSearch+"')+\"&DropSearch="+ASearch+"&page="+(pageIndex);   
79  result.Append("<a   title='末页'   href='"+href+"'><font   face='webdings'>:</font></a>&nbsp;&nbsp;");   
80  }
   
81  else   
82  {   
83  result.Append("<a   disabled='true'><font   face='webdings'>4</font></a>&nbsp;&nbsp;");   
84  result.Append("<a   disabled='true'><font   face='webdings'>:</font></a>&nbsp;&nbsp;&nbsp;");   
85  }
   
86  return   result.ToString();   
87  }

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3