在存储过程中实现分页

李兆奇

李兆奇

2016-02-19 17:59

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐在存储过程中实现分页,无聊中的都看过来。
     我不是一个很有经验的程序员,在做项目的过程中会遇到很多的问题,在数据库中使用分页就是我做项目中遇到的一个问题.我从网上查了很多资料,有很多种方法.但我觉的创建临时数据表是最简单的方法,在我做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 @PageLowerBound=@PageIndex * @PageSize
  18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
  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 @TotalRecords=@@ROWCOUNT
  36
  37  --获取我们所要的记录.
  38  SELECT s.*
  39  FROM [Simple] s,#PageIndexForSimple p
  40  WHERE s.[SimpleId]=p.[SimpleId]
  41            AND p.[IndexId]=@PageLowerBound
  42            AND P.[IndexId]=@PageUpperBound
  43  ORDER BY s.[Simple]
  44
  45   --返回记录总数.
  46   RETURE @TotalRecords
  47END      由上面的注释就能看懂了,呵呵,既然写到这里也把程序的代码写出来:
   1Public ListSimple GetSimple(int pageIndex,int pageIndex,out int totalRecords){
   2  ListSimple entity=new ListSimple();
   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而导致错误.
  http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html
展开更多 50%)
分享

猜你喜欢

在存储过程中实现分页

Web开发
在存储过程中实现分页

实现分页的例子-使用存储过程来实现分页

ASP
实现分页的例子-使用存储过程来实现分页

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在SQL Server存储过程中执行DTS包

SQLServer
在SQL Server存储过程中执行DTS包

asp 用存储过程实现数据分页

ASP
asp 用存储过程实现数据分页

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

存储过程分页

ASP
存储过程分页

在SQL Server的存储过程中调用Com组件

SQLServer
在SQL Server的存储过程中调用Com组件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win7如何定时自动关机?

Win7如何定时自动关机?

在Win7中如何将FAT32转为NTFS格式?

在Win7中如何将FAT32转为NTFS格式?
下拉加载更多内容 ↓