asp.net存储过程分页+GridView控件 几百万数据 超快
存储过程:---亲测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控件 几百万数据 超快的更多相关文章
- asp.net中的GridView控件的部分知识点
<PagerTemplate> <br /> <asp:Label ID="lblPage" runat="server" Tex ...
- ASP通过代码绑定Gridview控件
using System.Configuration;using System.Data.OleDb;using System.Data; public partial class datafilm ...
- ASP.NET中GridView控件删除数据的两种方法
今天在用GridView控件时,发现了一个问题,就是使用GridView控件在删除数据时的问题.接下来我们通过模板列方式和CommandField方式删除某条数据讲解下两者之间的区别. 方式一:通 ...
- GridView控件
GridView是ASP.NET 1.x的DataGrid控件的后继者.它提供了同样的基本功能集,同一时候添加�了大量扩展和改进.如前所述,DataGrid(ASP.NET 2.0仍然全然支持)是一个 ...
- Repeater, DataList, 和GridView控件的区别
http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15 ...
- 数据绑定技术一:GridView控件
在网站或应用程序中,要显示数据信息,可用到ASP.NET提供的数据源控件和能够显示数据的控件. 一.数据源控件 数据源控件用于连接数据源.从数据源中读取数据以及把数据写入数据源. 1.数据源控件特点 ...
- 在DevExpress程序中使用Winform分页控件直接录入数据并保存
一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...
- GridView控件详解
一.介绍 GridView控件一表格形式显示数据源中的数据.提供对列进行排序.分页以及编辑.删除单个记录的功能. 二.绑定数据源 第一种使用DataSourceID属性.可以直接把GridView控件 ...
- 027. asp.net中数据绑定控件之 GridView控件
GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设 ...
随机推荐
- 3. 支持向量机(SVM)拉格朗日对偶性(KKT)
1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...
- phpMyadmin各版本漏洞
一: 影响版本:3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 ANYUN.ORG 概述:PhpMyAdmin存在PREGREPLACEEVAL漏洞 利用模块: ...
- 记一次从git@osc导入Android项目到Eclipse的过程
. . . . . 之前写了一个Android的小项目,放在了git@osc上面托管代码.第一次开发完之后直接用git bash提交上去,然后每次修改都是手工通过git bash往上面合并代码.感觉很 ...
- [net]ftp ssh http telnet https服务及端口
转自:http://blog.csdn.net/qq_34642668/article/details/52116490 FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务. ...
- 模式匹配之Boyer-Moore算法
BM 算法是一个较优的模式匹配算法.一般,如果不考虑模式串的长度,一个具有时间复杂度O(n)的算法应该是最优的了,但是事实不是如此.BM算法可以实现更高效率的模式匹配.分析和实验说明,BM匹配算法对于 ...
- redis主从配置(docker实现)
一.docker新建两个redis服务端,并分别设置端口为6379和6380 命令如下: docker run -p : -d --name redis-server docker.io/redis: ...
- CPP_封装_继承_多态
类的三方法:封装,继承,多态.封装:使用一整套方法去创建一个新的类型,这叫类的封装.继承:从一个现有的类型基础上,稍作改动,得到一个新的类型的方法,叫类的继承.多态:当有几个不同的子类对象时,对象调用 ...
- Sahi (3) —— 压力测试Load Test以CAS SSO登陆场景为例(103 Tutorial)
Sahi (3) -- 压力测试Load Test以CAS SSO登陆场景为例(103 Tutorial) jvm版本: 1.8.0_65 sahi版本: Sahi Pro 6.1.0 参考来源: S ...
- Java编程的逻辑 (50) - 剖析EnumMap
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- SpringBoot 中常用注解@Controller/@RestController/@RequestMapping的区别
SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别 @Controller 处理http请求 @Controller //@Re ...