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

asp.net|存储过程|分页|技巧

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

时间: 2024-11-07 19:00:09

ASP.NET技巧:在存储过程中实现分页的相关文章

asp.net使用FCK编辑器中的分页符实现长文章分页功能_实用技巧

本文实例讲述了asp.net使用FCK编辑器中的分页符实现长文章分页功能.分享给大家供大家参考,具体如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="SplitContent.aspx.cs" Inherits="SplitContent" %> <%@ Register Assembly="FredCK.FCKeditorV2&

ASP.NET技巧:一个通用的分页类

asp.net|分页|技巧 结合一个存储过程,将分页做成最简单,请看以下源码 此分页类所操作的存储过程#region 此分页类所操作的存储过程/**//********************************************************* *  * 功能强大,配合以下这个存储过程  *  * *******************************************************//**//*-- Pager 1,10,0,0, 'Employe

ASP.NET调用oracle存储过程实现快速分页

asp.net|oracle|存储过程|分页 包定义:  create or replace package MaterialManage is  TYPE T_CURSOR IS REF CURSOR;  Procedure Per_QuickPage  (  TbName         in   varchar2,     --表名  FieldStr       in   varchar2,     --字段集  RowFilter      in   varchar2,     --过

ASP.NET技巧:access下的分页方案

access|asp.net|分页|技巧 具体不多说了,只贴出相关源码~ using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.OleDb;using System.Web; /**//// <summary>/// 名称:access下的分页方案(仿sql存储过程)/// 作者:cncxz(虫虫)/// blog:http://cncxz.cnbl

ASP.NET技巧:存储过程的分析

asp.net|存储过程|技巧 1 // 对存储过程的分析:实例 2         // string G_name ,string G_password为传递给此存储过程的参数,string Loging表示方法名和类型  3      4          public   string  Login( string  G_Name , string  G_Passord)  5          { 6  7             SqlConnection Conn  =   new

ASP.NET技巧:access下的分页方案_实用技巧

具体不多说了,只贴出相关源码~ using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.OleDb;using System.Web; /**//// <summary>/// 名称:access下的分页方案(仿sql存储过程)/// 作者:cncxz(虫虫)/// blog:http://cncxz.cnblogs.com/// </summa

如何在Oracle存储过程中实现分页

几乎每一个WEB应用都会用到分页,因此,将其做得通用高效就变得非常重要了,根据自己的想法用存储过程做了一个分页的存储过程,与大家分享,希望能够通过讨论得到更好的解决方案. 之所以用存储过程,是因为以后需要修改的话不需要修改程序代码,只需要修改存储过程的代码.但这个例子是在存储过程里动态生成的SQL语句,不知道会不会因此失去存储过程一次编译和快速的特点.代码如下: 1.首先建立一个包,用户创建一个游标类型 create or replace package pkg_query as type cu

ASP.NET技巧:GridView控件自定义分页详解

asp.net|分页|技巧|控件|详解   前些天我写了关于 <<在存储过程中实现分页>>和<<GridView控件事件详解 >> ,后来又有一些人问我怎样在GridView中应用这个东东!其实很简单,主要是怎么保存当前页面的页码PageIndex问题,不过把这个解决了什么都好办了.因为在分页过程中:PageSize是一定的,我们可以用一个属性来表示.保存PageIndex好多中方法,而且数据不是很庞大,基本不会好太多的资源.还是一句老话,话再多都没有例子直

asp.net 结合mysql存储过程进行分页代码_实用技巧

不过在网上找了一些,发现都有一个特点--就是不能传出总记录数,干脆自己研究吧.终于,算是搞出来了,效率可能不是很好,但是我也觉得不错了.贴代码吧直接:也算是对自己学习mysql的一个记录. 复制代码 代码如下: CREATE PROCEDURE p_pageList ( m_pageNo int , m_perPageCnt int , m_column varchar(1000) , m_table varchar(1000) , m_condition varchar(1000), m_or