我不是一个很有经验的程序员,在做项目的过程中会遇到很多的问题,在数据库中使用分页就是我做项目中遇到的一个问题.我从网上查了很多资料,有很多种方法.但我觉的创建临时数据表是最简单的方法,在我做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而导致错误.