asp.net利用存储过程分页代码

下面是存储过程(sqlserver2000下通过)

 

--最通用的分页存储过程
-- 获取指定页的数据 

CREATE PROCEDURE Pagination 

@tblName   varchar(255),       -- 表名 

@strGetFields varchar(1000) = ''*'',  -- 需要返回的列 

@fldName varchar(255)='''',      -- 排序的字段名 

@PageSize   int = 10,          -- 页尺寸 

@PageIndex  int = 1,           -- 页码 

@doCount  bit = 0,   -- 返回记录总数, 非 0 值则返回 

@OrderType bit = 0,  -- 设置排序类型, 非 0 值则降序 

@strWhere  varchar(1500) = ''''  -- 查询条件 (注意: 不要加 where) 

AS 

declare @strSQL   varchar(5000)       -- 主语句 

declare @strTmp   varchar(110)        -- 临时变量 

declare @strOrder varchar(400)        -- 排序类型 

if @doCount != 0 

 begin 

   if @strWhere !='''' 

   set @strSQL = ''select count(*) as Total from [''+ @tblName +''] where ''+ @strWhere 

   else 

   set @strSQL = ''select count(*) as Total from [''+ @tblName +'']''

end 

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都
--是@doCount为0的情况 

else 

begin 

if @OrderType != 0 

begin 

   set @strTmp = ''<(select min'' 

set @strOrder = '' order by [''+ @fldName +''] desc''

--如果@OrderType不是0,就执行降序,这句很重要! 

end 

else 

begin 

   set @strTmp = ''>(select max''

   set @strOrder = '' order by [''+ @fldName +''] asc''

end 

if @PageIndex = 1 

begin 

   if @strWhere != ''''   

    set @strSQL = ''select top '' + str(@PageSize) +'' ''+@strGetFields+ ''  from [''+ @tblName +''] where '' + @strWhere + '' '' + @strOrder 

    else 

    set @strSQL = ''select top '' + str(@PageSize) +'' ''+@strGetFields+ ''  from [''+ @tblName +''] ''+ @strOrder 

--如果是第一页就执行以上代码,这样会加快执行速度 

end 

else 

begin 

--以下代码赋予了@strSQL以真正执行的SQL代码 

set @strSQL = ''select top '' + str(@PageSize) +'' ''+@strGetFields+ ''  from ['' + @tblName +''] where ['' + @fldName + '']'' + @strTmp + ''([''+ @fldName + '']) 
from (select top '' + str((@PageIndex-1)*@PageSize) + '' [''+ @fldName + ''] from [''+ @tblName +'']'' + @strOrder + '') as tblTmp)''+ @strOrder 

if @strWhere != '''' 

   set @strSQL = ''select top '' + str(@PageSize) +'' ''+@strGetFields+ ''  from [''+ @tblName +''] where ['' + @fldName + '']'' + @strTmp + ''([''+ @fldName + '']) from (select top '' + str((@PageIndex-1)*@PageSize) + '' [''+ @fldName + ''] 
from [''+ @tblName +''] where '' + @strWhere + '' '' + @strOrder + '') as tblTmp) and '' + @strWhere + '' '' + @strOrder 

end 

end   

exec ( @strSQL)
GO

 

下面是C#的代码

using System.Data ;
using System.Data.SqlClient ;
using Microsoft.ApplicationBlocks.Data ;
using System.Web ;
using System.Web.UI ;
namespace RssLayer.PageHelper
{
    /**//// <summary>
    /// 分页类PagerHelper 的摘要说明。
    /// </summary>
    public class PagerHelper
    {
        private string connectionString;

    

        public PagerHelper(string tblname,string sortname,bool docount,string connectionString)
        {
            this.tblName = tblname;
            this.fldName = sortname ;
            this.connectionString  = connectionString ;
            this.docount = docount;
        }

        public PagerHelper(string tblname,bool docount,
            string strGetFields,    string fldName,int pagesize,
            int pageindex,bool ordertype,string strwhere,string connectionString        
            )
        {
            this.tblName = tblname ;            
            this.docount = docount ;
            this.strGetFields = strGetFields ;
            this.fldName = fldName;
            this.pagesize = pagesize ;
            this.pageindex = pageindex;
            this.ordertype = ordertype ;
            this.strwhere = strwhere ;
            this.connectionString  = connectionString ;

        }

        /**//// <summary>
        /// 得到记录集的构造函数
        /// </summary>
        /// <param name="tblname"></param>
        /// <param name="strwhere"></param>
        /// <param name="connectionString"></param>
        public PagerHelper(string tblname,string strwhere,string connectionString)    
        {
            this.tblName = tblname;
            this.strwhere = strwhere ;
            this.docount = true;
            this.connectionString  = connectionString ;
        }

        private string tblName;
        public string TblName
        {
            get{return tblName;}
            set{tblName =value;}
        }

        private string strGetFields="*";
        public string StrGetFields
        {
            get{return strGetFields ;}
            set{strGetFields =value;}
        }

        private string fldName=string.Empty;
        public string FldName
        {
            get{return fldName ;}
            set{fldName =value;}
        }

        

        private int pagesize =10;
        public int PageSize
        {
            get{return pagesize ;}
            set{pagesize =value;}
        }

        private int pageindex =1;
        public int PageIndex
        {
            get{return pageindex ;}
            set{pageindex =value;}
        }

        private bool docount=false;
        public bool DoCount
        {
            get{return docount ;}
            set{docount =value;}
        }

        private bool ordertype=false;
        public bool OrderType
        {
            get{return ordertype ;}
            set{ordertype =value;}
        }

        private string strwhere=string.Empty ;
        public string StrWhere
        {
            get{return strwhere ;}
            set{strwhere =value;}
        }

        

    

        public IDataReader GetDataReader()
        {

            if(this.docount)
            {
                throw new ArgumentException("要返回记录集,DoCount属性一定为false");
            }

        

        //    System.Web.HttpContext.Current.Response.Write(pageindex);

            return SqlHelper.ExecuteReader(connectionString,CommandType.StoredProcedure,"Pagination",
                new SqlParameter("@tblName",this.tblName),
                new SqlParameter("@strGetFields",this.strGetFields),
                new SqlParameter("@fldName",this.fldName),
                new SqlParameter("@PageSize",this.pagesize),
                new SqlParameter("@PageIndex",this.pageindex),
                new SqlParameter("@doCount",this.docount),
                new SqlParameter("@OrderType",this.ordertype),
                new SqlParameter("@strWhere",this.strwhere)
                );
        }

        public DataSet GetDataSet()
        {
            if(this.docount)
            {
                throw new ArgumentException("要返回记录集,DoCount属性一定为false");
            }    

            return SqlHelper.ExecuteDataset(connectionString,CommandType.StoredProcedure,"Pagination",
                new SqlParameter("@tblName",this.tblName),
                new SqlParameter("@strGetFields",this.strGetFields),
                new SqlParameter("@fldName",this.fldName),
                new SqlParameter("@PageSize",this.pagesize),
                new SqlParameter("@PageIndex",this.pageindex),
                new SqlParameter("@doCount",this.docount),
                new SqlParameter("@OrderType",this.ordertype),
                new SqlParameter("@strWhere",this.strwhere)
                );
        }

        public int GetCount()
        {
            if(!this.docount)
            {
                throw new ArgumentException("要返回总数统计,DoCount属性一定为true");
            }

                    

            return (int)SqlHelper.ExecuteScalar(connectionString,CommandType.StoredProcedure,"Pagination",
                new SqlParameter("@tblName",this.tblName),
                new SqlParameter("@strGetFields",this.strGetFields),
                new SqlParameter("@fldName",this.fldName),
                new SqlParameter("@PageSize",this.pagesize),
                new SqlParameter("@PageIndex",this.pageindex),
                new SqlParameter("@doCount",this.docount),
                new SqlParameter("@OrderType",this.ordertype),
                new SqlParameter("@strWhere",this.strwhere)
                );
        }        

    }

    

}
 

时间: 2024-07-29 18:59:40

asp.net利用存储过程分页代码的相关文章

asp.net C# 存储过程分页代码

 代码如下 复制代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace opdata {     pub

asp.net sql存储过程分页代码

use [data_smf] go /****** 对象:  storedprocedure [dbo].[catsearch]    脚本日期: 01/23/2011 04:34:30 ******/ set ansi_nulls on go set quoted_identifier on go -- ============================================= -- author:        <author,,name> -- create date:

请教GridView利用存储过程分页的问题?谢谢!

问题描述 本人属于菜鸟,跪求GridView利用存储过程分页的代码,最好有详细的说明.使用的后台语言为C#,数据库为SQLServer.不胜感谢! 解决方案 解决方案二: 可以用session也可以用隐藏控件之类的解决方案三: 俄搞错了我还以为是状态保存解决方案四: <asp:LabelID="lblPage"runat="server"Text='<%#"第"+(((GridView)Container.NamingContaine

高效mssql存储过程分页代码(1/6)

在一般的小数据分页是我们就用简单的分页功能就可以了,但如果上百万级数据分页了,那么我就不得不考虑到高效mssql存储过程分页代码哦. declare @TotalCount int declare @TotalPageCount int exec P_viewPage_A 'type1','*','id','','id asc',1,0,4,3,@TotalCount output,@TotalPageCount output select * from type1 Create PROC P_

sqlserver 通用存储过程分页代码

分页存储过程大致有下列几种 1. 利用Not in 和select top 2. 利用id大于多少和select top 3. 利用sql中的游标 4.临时表 可以参看网上的以下链接 C#中常用的分页存储过程小结 http://read.newbooks.com.cn/info/174545.html 在2005中我们的选择就多了,可以利用新语法CTE(公用表表达式),关于CTE的介绍大家可以参看博客园中一位仁兄的系列教程 http://www.cnblogs.com/nokiaguy/arch

Asp.NET 的aspnetpager分页代码

asp教程.net 的aspnetpager分页代码  @ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="test_default" stylesheettheme="default" %> <%...@ register assembly="aspnetpager"

asp.net repeater 数字分页代码

asp教程.net repeater 数字分页代码 public static string sort { set; get; }     private static string strsql;     sqlconnection con = new sqlconnection("server=localhost;database=moldsystem;uid=sa;pwd=sa");//这个是全局变量         private pageddatasource pds()  

一个asp.net MVC 的分页代码

哈哈,这个博客的处女文啦~~ 首先声明,这个分页代码并不是出自我手哈,借用了网上的一段代码,然后加了个css,变的好看一些啦~~ 原作者忘记是谁了,实在找不到了--万分抱歉啊~~ 效果如下:     1 using System; 2  using System.Collections.Generic; 3  using System.Linq; 4  using System.Web; 5  using System.Web.Mvc; 6  using System.Web.Routing;

asp 存储过程分页代码第1/2页

存储过程采用的是select top 加 not in的方式完成,速度也算是相当快了 我测试过了百万级数据量一般查询在1秒一下,贴出来大家交流下,看有没有什么好的建议. 简单几句话就可以实现分页功能,请看代码: 最简单使用方法(适用于任何数据表): test.asp 复制代码 代码如下: <!--#include file="conn.asp"--> <!--#include file="Page.asp"--> <% Set My =