存储过程:---亲测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. with open

    再考虑一个场景,要读取文件内容,并把年龄和名字的顺序交换存成新文件age_name.txt,这时可以同时打开两个文件:with open('name_age.txt', 'r') as fread, ...

  2. centos7永久更改主机名

    操作环境: [root@bogon ~]# uname -a Linux #localhost.localdomain 3.10.0-514.el7.centos.plus.i686 #1 SMP W ...

  3. 老项目Xcode5.1编译器错误

    老项目编译器错误html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; pa ...

  4. Java 开发中的对象拷贝

    前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提 ...

  5. C语言 · 成绩查询系统

    抱歉,昨天忘了往博客上更新,今天补上. 成绩查询系统 分值: 21 数学老师小y 想写一个成绩查询系统,包含如下指令: insert [name] [score],向系统中插入一条信息,表示名字为na ...

  6. C语言 · 瓷砖铺放

    算法训练 瓷砖铺放   时间限制:1.0s   内存限制:512.0MB        锦囊1 递归或递推.   问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长 ...

  7. PHP——大话PHP设计模式——命名空间和类的自动载入

    开发工具:phpstorm phpstudy 命名空间:声明当前文件 类的自动载入

  8. Selenium (4) —— Selenium是什么? WebDriver是什么?做什么?(101 Tutorial)

    Selenium (4) -- Selenium是什么? WebDriver是什么?做什么?(101 Tutorial) selenium版本: v2.48.0 (Standalone Seleniu ...

  9. es cat http://localhosts:9002/_cat/nodes?v

    http://localhosts:9002/_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used ...

  10. Windows下超强日志工具BareTail

    最近写了一些测试工具,经常希望能动态的查看日志文件,试了好些文本编辑文件如Emeditor.Vim等,一直没找到合适. 我希望支持的功能有: 支持大文件读取,速度要快 自动加载新的内容,直接定位到最后 ...