存储过程:---亲测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. u盘引导制作工具

    https://rufus.ie/en_IE.html

  2. Java多线程中的Runnable和Thread

    摘要: 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的r ...

  3. sed——linux下对文本当控制操作(替换,追加)

    sed——linux下对文本当控制操作(替换,追加) 2011-12-12 19:27:17 分类: LINUX Linux下sed命令 1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容 ...

  4. Could not read symbols解决方法

    Could not read symbols 陈运文 Could not read symbols:Linux/UNIX系统下编译时,常见的一类报错信息. 通常情况下,该编译报错信息之前会给出出现错误 ...

  5. 从商业角度探讨API设计

    为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定业务用例到设计方法论,解决实现难题,并从长远的角度看待在Web上维护 ...

  6. 【jquery】图片前后对比效果——beforeAfter

    今天分享一款 jquery 插件——图片前后对比(beforeAfter),效果如下: 使用方法: <!DOCTYPE HTML> <html lang="en" ...

  7. SQL Server创建远程链接服务器

    --使用sp_addlinkedserver增加链接 EXEC sys.sp_addlinkedserver @server='127.0.0.1', --被访问的服务器别名(习惯上直接使用目标服务器 ...

  8. 【Java集合源码剖析】HashMap源码剖析

    转载出处:http://blog.csdn.net/ns_code/article/details/36034955 HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-va ...

  9. MFC函数——CWnd::OnEraseBkgnd

    CWnd::OnEraseBkgnd afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返回值: 如果它擦除了背景,则返回非零值:否则返回0. 参数: pDC 指定了设备环 ...

  10. java生成word的完美解决方案

    http://www.360doc.com/content/13/0731/10/13247663_303740756.shtml —————————————————————————————————— ...