修正过的通用分页存储过程

最近在做毕业设计,用的是李天平老大开发的".Net代码自动生成器"搭建的框架,用起来感觉很不错,但是在用到分页存储时遇到了一个问题,原先的要么只能获取分页所需的数据,要么只能返回一个总共的数据值.这样略显麻烦了点.我就修改了一下源码和存储过程,可同时返回分页所需数据的同时,返回所有数据的个数.

存储过程:
 1 None.gif -- ----------------------------------
 2 None.gif-- 用途:分页存储过程(对有主键的表效率极高)  
 3 None.gif-- 说明:
 4 None.gif-- ----------------------------------
 5 None.gif
 6 None.gif ALTER   PROCEDURE  UP_GetRecordByPage
 7 None.gif     @tblName        varchar ( 255 ),        --  表名
 8 None.gif      @fldName        varchar ( 255 ),        --  主键字段名
 9 None.gif      @PageSize       int   =   10 ,            --  页尺寸
10 None.gif      @PageIndex      int   =   1 ,             --  页码
11 None.gif      @RowCount      int  output,             --  返回记录总数
12 None.gif      @OrderType      bit   =   0 ,             --  设置排序类型, 非 0 值则降序
13 None.gif      @strWhere       varchar ( 1000 =   ''    --  查询条件 (注意: 不要加 where)
14 None.gif AS
15 None.gif
16 None.gif declare   @strSQL     varchar ( 6000 )        --  主语句
17 None.gif declare   @strTmp     varchar ( 100 )         --  临时变量
18 None.gif declare   @strOrder   varchar ( 400 )         --  排序类型
19 None.gif
20 None.gif if   @OrderType   !=   0
21 None.gif begin
22 None.gif     set   @strTmp   =   ' <(select min '
23 None.gif     set   @strOrder   =   '  order by [ '   +   @fldName   + ' ] desc '
24 None.gif end
25 None.gif else
26 None.gif begin
27 None.gif     set   @strTmp   =   ' >(select max '
28 None.gif     set   @strOrder   =   '  order by [ '   +   @fldName   + ' ] asc '
29 None.gif end
30 None.gif
31 None.gif set   @strSQL   =   ' select top  '   +   str ( @PageSize +   '  * from [ '
32 None.gif     +   @tblName   +   ' ] where [ '   +   @fldName   +   ' ] '   +   @strTmp   +   ' ([ '
33 None.gif     +   @fldName   +   ' ]) from (select top  '   +   str (( @PageIndex - 1 ) * @PageSize +   '  [ '
34 None.gif     +   @fldName   +   ' ] from [ '   +   @tblName   +   ' ] '   +   @strOrder   +   ' ) as tblTmp) '
35 None.gif     +   @strOrder
36 None.gif
37 None.gif if   @strWhere   !=   ''
38 None.gif     set   @strSQL   =   ' select top  '   +   str ( @PageSize +   '  * from [ '
39 None.gif         +   @tblName   +   ' ] where [ '   +   @fldName   +   ' ] '   +   @strTmp   +   ' ([ '
40 None.gif         +   @fldName   +   ' ]) from (select top  '   +   str (( @PageIndex - 1 ) * @PageSize +   '  [ '
41 None.gif         +   @fldName   +   ' ] from [ '   +   @tblName   +   ' ] where  '   +   @strWhere   +   '   '
42 None.gif         +   @strOrder   +   ' ) as tblTmp) and  '   +   @strWhere   +   '   '   +   @strOrder
43 None.gif
44 None.gif if   @PageIndex   =   1
45 None.gif begin
46 None.gif     set   @strTmp   = ''
47 None.gif     if   @strWhere   !=   ''
48 None.gif         set   @strTmp   =   '  where  '   +   @strWhere
49 None.gif
50 None.gif     set   @strSQL   =   ' select top  '   +   str ( @PageSize +   '  * from [ '
51 None.gif         +   @tblName   +   ' ] '   +   @strTmp   +   '   '   +   @strOrder
52 None.gif end
53 None.gif
54 None.gif
55 None.gif declare   @sql   NVARCHAR ( 400 )
56 None.gif set   @sql   =  N ' select @RowCount=count(*) from  ' + @tblName + '  where  ' +   @strWhere
57 None.gif EXEC  sp_executesql  @sql ,N ' @RowCount int OUT ' , @RowCount  OUT  
58 None.gif
59 None.gif exec  ( @strSQL )

数据层也相应的做了些修改:
 1  ///   <summary>
 2           ///  分页获取数据列表
 3           ///   </summary>
 4           public  DataSet GetList( int  PageSize, int  PageIndex, string  strWhere, ref   int  Output)
 5          {
 6              SqlParameter[] parameters  =  {
 7                       new  SqlParameter( " @tblName " , SqlDbType.VarChar,  255 ),
 8                       new  SqlParameter( " @fldName " , SqlDbType.VarChar,  255 ),
 9                       new  SqlParameter( " @PageSize " , SqlDbType.Int),
10                       new  SqlParameter( " @PageIndex " , SqlDbType.Int),
11                       new  SqlParameter( " @RowCount " , SqlDbType.Int),
12                       new  SqlParameter( " @OrderType " , SqlDbType.Bit),
13                       new  SqlParameter( " @strWhere " , SqlDbType.VarChar, 1000 ),
14                      };
15              parameters[ 0 ].Value  =   " TM_TeachInfo " ;
16              parameters[ 1 ].Value  =   " InfoID " ;
17              parameters[ 2 ].Value  =  PageSize;
18              parameters[ 3 ].Value  =  PageIndex;
19              parameters[ 4 ].Direction  =  System.Data.ParameterDirection.Output;
20              parameters[ 5 ].Value  =   1 ;
21              parameters[ 6 ].Value  =  strWhere;
22 
23              DataSet ds  =  DbHelperSQL.RunProcedure( " UP_GetRecordByPage " ,parameters, " ds " );
24 
25               if  (parameters[ 4 ].Value  !=  DBNull.Value   &&  parameters[ 4 ].Value.ToString()  !=   string .Empty)
26              {
27                  Output = Convert.ToInt32(parameters[ 4 ].Value);
28              }
29 
30               return  ds;
31          }

转载于:https://www.cnblogs.com/maiqi/archive/2006/05/04/391349.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值