首页 > 编程 > .NET > 正文

ASP.NET技巧:在存储过程中实现分页

2024-07-10 13:09:33
字体:
来源:转载
供稿:网友
    我不是一个很有经验的程序员,在做项目的过程中会遇到很多的问题,在数据库中使用分页就是我做项目中遇到的一个问题.我从网上查了很多资料,有很多种方法.但我觉的创建临时数据表是最简单的方法,在我做membership扩展时发现原来微软也是这样用的,你可一随便打开一个membership的存储过程看看.
     说了再多也没用,只要看看代码就清楚了,呵呵.
    
 1create procedure dbo.createsimple
 2(
 3 @pageindex int,
 4 @pagesize int
 5)
 6as
 7begin
 8 --定义三个变量:
 9 -- @pagelowerbound :所取出记录的下限.
10 -- @pageupperbound: 所要取出记录的上限.
11 -- @totalrecords: 返回记录总数,主要用于页面的计算.
12 declare @pagelowerbound int
13 declare @pageupperbound int
14 declare @totalrecords int
15
16 --计算上下限的值.
17 set @[email protected] * @pagesize
18 set @[email protected][email protected]
19
20--创建临时表:
21--indexid是标识,自动增长1;
22--simpleid由数据表[simple]填充;
23 create table #pageindexforsimple
24 (
25  indexid int identity(0,1) not null,
26  simpleid int
27 )
28--填充临时表
29  insert into #pageindexforsimple(simpleid)
30  select s.[simpleid]
31  from [simple] s
32  --这里可以加where condition和oder by语句
33 
34  --取得记录总数,其实影响行数就是记录总数
35  select @[email protected]@rowcount
36
37  --获取我们所要的记录.
38  select s.*
39  from [simple] s,#pageindexforsimple p
40  where s.[simpleid]=p.[simpleid]
41            and p.[indexid]>[email protected]
42            and p.[indexid]<[email protected]
43  order by s.[simple]
44
45   --返回记录总数.
46   reture @totalrecords
47end      由上面的注释就能看懂了,呵呵,既然写到这里也把程序的代码写出来:
 1public list<simple> getsimple(int pageindex,int pageindex,out int totalrecords){
 2  list<simple> entity=new list<simple>();
 3  sqlparameter[]param=new sqlparameter[]{
 4     new sqlparameter("@pageindex",sqldbtype.int),
 5     new sqlparameter("@pagesize",sqldbtype.int),
 6   new sqlparameter("@returnvalue",sqldbtype.int),
 7 };
 8  param[0].value=pageindex;
 9  param[1].value=pagesize;
10  param[2].direction = parameterdirection.returnvalue;
11  sqldatareader reader=sqlhelper.executereader(commandtype.storedprocedure, "getsimple", param);
12  while(reader.read()){
13   entity.add(getsimpleentity(reader))
14  }
15  reader.close();
16  try{
17       totalrecords=(int)param[2].value;
18  }catch{}
19  return entity;
20}    上面的一些函数是自己写的:
     sqlhelper类:简化数据库查询类.
    getsimpleentity(sqldatareader reader):由于经常在项目中会用到好基础实体类的获取,所以单独写一个私有函数,以便重用;
    值得注意的是获取总的记录数时可能类型为dbnull而导致错误.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表