存储过程:---亲测275万数据,分页速度N快


create PROCEDURE PageList 
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int,--每页显示记录条数
@currentpage int,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
@rowcount int output,--总记录数,共有几条信息
@pagecount int output--总页数,共有多少页
AS
declare @countsql nvarchar(50)
declare @sql nvarchar(200)
declare @subsql nvarchar(100)--not in子sql语句
declare @tmpOrderid nvarchar(50) 
--返回总记录数,并赋值给输出参数@rowcount
set @countsql='select @totalcount=count(*) from '+@tablename
exec sp_executesql @countsql,N'@totalcount int out',@rowcount output --判断字段名是否为空
if @fieldname is null or @fieldname=''
set @fieldname=' * ' --判断是否排序及排序方式
if @orderid is null or @orderid=''
set @tmpOrderid=' '
else
begin 
if @sort=0
set @tmpOrderid='order by '+@orderid+' desc'
else
set @tmpOrderid='order by '+@orderid+' asc'
end --计算页数
if @rowcount%@pagesize>0
set @pagecount =(@rowcount/@pagesize)+1;
else
set @pagecount=@rowcount/@pagesize; --分页算法实现
set @subsql='select top'+str(@pagesize*(@currentpage-1))+' '+@orderid+' from '+@tablename+' '+@tmpOrderid
set @sql='select top'+str(@pagesize)+' '+@fieldname+' from '+@tablename+' where '+@orderid+' not in ('+@subsql+')'+@tmpOrderid
exec(@sql)

aspx文件:


<asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
        </div>
        第<asp:Label ID="lblCurrent" runat="server"></asp:Label>页 | 每页<asp:Label ID="lblPageSize"
            runat="server"></asp:Label>条 | 共有<asp:Label ID="lblPageTotal" runat="server"></asp:Label>页 |  共有<asp:Label ID="lblRowsTotal"
            runat="server"></asp:Label>条信息 |
        <asp:HyperLink ID="hlFirst" runat="server">首页</asp:HyperLink>
        |
        <asp:HyperLink ID="hlPrev" runat="server">上一页</asp:HyperLink>
        |
        <asp:HyperLink ID="hlNext" runat="server">下一页</asp:HyperLink>
        |
        <asp:HyperLink ID="hlLast" runat="server">尾页</asp:HyperLink><br />

.cs文件:


protected void Page_Load(object sender, EventArgs e)
    {
        int CurrentPage,RowCount,PageCount;
        int PageSize = ;
        if (Request["CurrentPage"] == null||Convert.ToInt32(Request["CurrentPage"])< )
        {
            CurrentPage=;
        }
        else
        {
            CurrentPage=Convert.ToInt32(Request["CurrentPage"]);
        }         //数据库操作
        SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings["ConnStr"].ToString());
        SqlCommand cmd = new SqlCommand("pagelist", sqlconn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = sqlconn;
        SqlParameter[] prams ={
                               new SqlParameter("@tablename",SqlDbType.NVarChar,),
                               new SqlParameter("@fieldname",SqlDbType.NVarChar,),
                               new SqlParameter("@pagesize",SqlDbType.Int),
                               new SqlParameter("@currentpage",SqlDbType.Int),
                               new SqlParameter("@orderid",SqlDbType.NVarChar,),
                               new SqlParameter("@sort",SqlDbType.Int),
                               new SqlParameter("@rowcount",SqlDbType.Int),
                               new SqlParameter("@pagecount",SqlDbType.Int)};
        prams[].Value = "news";//表名
        prams[].Value ="*";//字段名
        prams[].Value =PageSize;//每页显示条数
        prams[].Value =CurrentPage;//当前页数
        prams[].Value ="id";//主键
        prams[].Value =;//排序方式,0表示降序,1表示升序
        prams[].Direction = ParameterDirection.Output;//总记录数
        prams[].Direction = ParameterDirection.Output;//总页数
        foreach(SqlParameter pram in prams)
        {
            cmd.Parameters.Add(pram);
        }
        sqlconn.Open();
        SqlDataAdapter sda = new SqlDataAdapter();
        DataSet ds = new DataSet();
        sda.SelectCommand = cmd;
        sqlconn.Close();
        sda.Fill(ds);
        //数据库操作结束         RowCount = (int)cmd.Parameters["@rowcount"].Value;
        PageCount =(int)cmd.Parameters["@pagecount"].Value;
        
        if (CurrentPage>PageCount)
        {
            Response.Redirect("CutPage.aspx?CurrentPage="+Convert.ToString(PageCount));
            Response.End();
        }
        this.lblCurrent.Text = Convert.ToString(CurrentPage);
        this.lblPageTotal.Text = Convert.ToString(PageCount);
        this.lblRowsTotal.Text = Convert.ToString(RowCount);
        this.lblPageSize.Text = Convert.ToString(PageSize);         this.hlFirst.NavigateUrl = "CutPage.aspx?CurrentPage=1";
        this.hlPrev.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage-);
        this.hlNext.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage+);
        this.hlLast.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(PageCount);
        if (Convert.ToInt32(CurrentPage) == )
        {
            this.hlPrev.Enabled = false;
            this.hlFirst.Enabled = false;
        }
        if (Convert.ToInt32(CurrentPage) == PageCount)
        {
            this.hlNext.Enabled = false;
            this.hlLast.Enabled = false;
        }         GridView1.DataSource = ds.Tables[];
        GridView1.DataBind();
    }

asp.net存储过程分页+GridView控件 几百万数据 超快的更多相关文章

  1. asp.net中的GridView控件的部分知识点

    <PagerTemplate> <br /> <asp:Label ID="lblPage" runat="server" Tex ...

  2. ASP通过代码绑定Gridview控件

    using System.Configuration;using System.Data.OleDb;using System.Data; public partial class datafilm ...

  3. ASP.NET中GridView控件删除数据的两种方法

      今天在用GridView控件时,发现了一个问题,就是使用GridView控件在删除数据时的问题.接下来我们通过模板列方式和CommandField方式删除某条数据讲解下两者之间的区别. 方式一:通 ...

  4. GridView控件

    GridView是ASP.NET 1.x的DataGrid控件的后继者.它提供了同样的基本功能集,同一时候添加�了大量扩展和改进.如前所述,DataGrid(ASP.NET 2.0仍然全然支持)是一个 ...

  5. Repeater, DataList, 和GridView控件的区别

    http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15 ...

  6. 数据绑定技术一:GridView控件

    在网站或应用程序中,要显示数据信息,可用到ASP.NET提供的数据源控件和能够显示数据的控件. 一.数据源控件 数据源控件用于连接数据源.从数据源中读取数据以及把数据写入数据源. 1.数据源控件特点 ...

  7. 在DevExpress程序中使用Winform分页控件直接录入数据并保存

    一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...

  8. GridView控件详解

    一.介绍 GridView控件一表格形式显示数据源中的数据.提供对列进行排序.分页以及编辑.删除单个记录的功能. 二.绑定数据源 第一种使用DataSourceID属性.可以直接把GridView控件 ...

  9. 027. asp.net中数据绑定控件之 GridView控件

    GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设 ...

随机推荐

  1. model number

    // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...

  2. Scapy:局域网MAC地址扫描脚本

    转载自:http://blog.sina.com.cn/s/blog_4b5039210100gn6k.html 未测试,回头研究研究. 用python+scapy写的,只要双击.py文件即可,扫描当 ...

  3. ASP.NET学习笔记(1)——VS自动引入命名空间快捷键

    说明(2017-7-3 22:16:35) 1.在vs的“工具”->“选项”中,左侧树形菜单,“环境”下的“键盘”中设置快捷键. 在“显示命令包含”输入框内输入“显示智能标记”,找到“视图.显示 ...

  4. C#通过反射获取对象属性,打印所有字段属性的值

    获取所有字段的值: public void PrintProperties(Object obj) { Type type = obj.GetType(); foreach( PropertyInfo ...

  5. mongo 操作小结

    这里总结一下mongo常用操作语句,分享给大家和我自己~ 打印系统,数据库,集合的信息 db.stats()                                    打印数据库状态 db ...

  6. openvpn之server配置篇

    openvpn server的配置路径下有大约如下文件: [root@localhost server]# ll total -rw-r-----. nobody nobody Sep ca.crt ...

  7. JPA和Spring-Data-JPA简介

    什么是JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.它的出现主要是为了 ...

  8. 解决studio的URI is not registered (Setting|Language&Frameworks|Schemas and DTDs)

    高高兴兴过完国庆来上班,studio一打开发现布局文件跟不进去,点进去就到了R文件里,layout的文件里 xmlns:android="http://schemas.android.com ...

  9. 利用R里的options函数进行光标和数字位数设置

    用R写代码时,打字水平不高,有时候不知道乱按了一些键(现在我还不知道哪个键),光标就变成了加粗的竖直线,又改不回去.这种情况下我们可以用options函数进行光标设置,例如:options(promp ...

  10. Chrome 各版本下载集合

    Windows平台: Chrome 在线安装包: 最新稳定版(Stable Channel)Chrome在线安装: [点击这里] 最新测试版(Beta Channel)Chrome在线安装: [点击这 ...