All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
Transact_SQL小手册(各种sql语句大集合)_[SQL,Server教程]
ajax+php无刷新二级联动下拉菜单(省市联动)源码_[PHP教程]
如何找出相同月日记录_[SQL Server教程]
Asp.Net,可自定义分页用户控件_[Asp.Net教程]
PHP学习宝典-第一章_[PHP教程]
利用XSLT来换XML的根_[XML教程]
Linux环境下如何使用PHP处理图像_php资料_编程技术
实例讲解PHP中实现代码重用的两个函数_php资料_编程技术
精通数据库系列之入门-技巧篇1_mssql学习_编程技术
C#中常见的错误类型
Reading number is top 10 pictures
大四女生借债隆胸成功
传几朵花
这只猪到底犯了什么错?
The other a successor of sora aoi
The money of more than 100 countries and regions9
Other people's teacher VS my teacher
什么叫国家
The mother was a stay-at-home children too tired took three baby suicide
Ashlynn Brooke a group sexy photo4
这酸爽,让人不敢相信
Download software ranking
艳兽都市
传奇私服架设教程-chm
Tram sex maniac 2 (H) rar bag1
仙剑奇侠传98硬盘WINXP版
Adobe Flash Player(IE) 10.0.32.18 浏览器专用的FLASH插件
WebService在.NET中的实战应用教学视频 → 第5集
I'm come from Beijing1
尖东毒玫瑰B
Sora aoi, the maid, students' uniforms
linux初级教程
delv published in(发表于) 2014/1/6 8:49:11 Edit(编辑)
asp.net(C#)海量数据表高效率分页算法(不使用存储过程)_[Asp.Net教程]

asp.net(C#)海量数据表高效率分页算法(不使用存储过程)_[Asp.Net教程]

asp.net(C#)海量数据表高效率分页算法(不使用存储过程)_[Asp.Net教程]























首先创建一张表(要求ID自动编号):
create table redheadedfile(
id int identity(1,1),
filenames nvarchar(20),
senduser nvarchar(20),
primary key(id)
)
然后我们写入50万条记录:
declare @i int
set @i=1
while @i<=500000
begin
insert into redheadedfile(filenames,senduser) values('我的分页算法','陆俊铭')
set @i=@i+1
end
GO
用Microsoft Visual Studio .NET 2003创建一张WebForm网页(本人起名webform8.aspx)
前台代码片段如下(webform8.aspx):
<%@ Page language="c#" Codebehind="WebForm8.aspx.cs" AutoEventWireup="false" Inherits="WebApplication6.WebForm8" %>



WebForm8







CellPadding="0" Runat="server">












align="center"><%#DataBinder.Eval(Container.DataItem,"filenames")%>







align="center"><%#DataBinder.Eval(Container.DataItem,"senduser")%>







align="center"><%#DataBinder.Eval(Container.DataItem,"id")%>












页/共




记录



CommandName="0">首页&nbsp;&nbsp;&nbsp;&nbsp;




上一页&nbsp;&nbsp;&nbsp;&nbsp;


CommandName="next">下一页&nbsp;&nbsp;&nbsp;&nbsp;


CommandName="last">尾页&nbsp;&nbsp;&nbsp;&nbsp;当前第


ForeColor="#ff0000">页&nbsp;&nbsp;&nbsp;&nbsp;跳页


MaxLength="5" AutoPostBack="True">





后台代码片段如下(webform8.aspx.cs)
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;




namespace WebApplication6
{
///


/// WebForm8 的摘要说明。
///

public class WebForm8 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton Fistpage;
protected System.Web.UI.WebControls.LinkButton Prevpage;
protected System.Web.UI.WebControls.LinkButton Nextpage;
protected System.Web.UI.WebControls.LinkButton Lastpage;
protected System.Web.UI.WebControls.DataList datalist1;
protected System.Web.UI.WebControls.DropDownList mydroplist;
protected System.Web.UI.WebControls.Label LPageCount;
protected System.Web.UI.WebControls.Label LRecordCount;
protected System.Web.UI.WebControls.Label LCurrentPage;
protected System.Web.UI.WebControls.TextBox gotoPage;
const int PageSize=20;//定义每页显示记录
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//定义几个保存分页参数变量

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
RecCount = Calc();//通过Calc()函数获取总记录数
PageCount = RecCount/PageSize + OverPage();//计算总页数(加上OverPage()函数防止有余数造成显示




数据不完整)




ViewState["PageCounts"] = RecCount/PageSize -




ModPage();//保存总页参数到ViewState(减去ModPage()函数防止SQL语句执行时溢出查询范围,可以用存储过程分页算法来理解这句)
ViewState["PageIndex"] = 0;//保存一个为0的页面索引值到ViewState
ViewState["JumpPages"] = PageCount;//保存PageCount到ViewState,跳页时判断用户输入数是否超出页




码范围
//显示LPageCount、LRecordCount的状态
LPageCount.Text = PageCount.ToString();
LRecordCount.Text = RecCount.ToString();
//判断跳页文本框失效
if(RecCount <= 20)
gotoPage.Enabled = false;
TDataBind();//调用数据绑定函数TDataBind()进行数据绑定运算
}
}
//计算余页
public int OverPage()
{
int pages = 0;
if(RecCount%PageSize != 0)
pages = 1;
else
pages = 0;
return pages;
}
//计算余页,防止SQL语句执行时溢出查询范围
public int ModPage()
{
int pages = 0;
if(RecCount%PageSize == 0 && RecCount != 0)
pages = 1;
else
pages = 0;
return pages;
}
/*
*计算总记录的静态函数
*本人在这里使用静态函数的理由是:如果引用的是静态数据或静态函数,连接器会优化生成代码,去掉动态重定位项(对




海量数据表分页效果更明显)。
*希望大家给予意见、如有不正确的地方望指正。
*/
public static int Calc()
{
int RecordCount = 0;
SqlCommand MyCmd = new SqlCommand("select count(*) as co from redheadedfile",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
if(dr.Read())
RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
return RecordCount;
}
//数据库连接语句(从Web.Config中获取)
public static SqlConnection MyCon()
{
SqlConnection MyConnection = new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
MyConnection.Open();
return MyConnection;
}
//对四个按钮(首页、上一页、下一页、尾页)返回的CommandName值进行操作
private void Page_onClick(object sender, CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行参数运





Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数运算




string cmd = e.CommandName;
switch(cmd)//筛选CommandName
{
case "next":
CurrentPage++;
break;
case "prev":
CurrentPage--;
break;
case "last":
CurrentPage = Pages;
break;
default:
CurrentPage = 0;
break;
}
ViewState["PageIndex"] = CurrentPage;//将运算后的CurrentPage变量再次保存至ViewState
TDataBind();//调用数据绑定函数TDataBind()
}




private void TDataBind()
{
CurrentPage = (int)ViewState["PageIndex"];//从ViewState中读取页码值保存到CurrentPage变量中进行按钮失




效运算
Pages = (int)ViewState["PageCounts"];//从ViewState中读取总页参数进行按钮失效运算
//判断四个按钮(首页、上一页、下一页、尾页)状态
if (CurrentPage + 1 > 1)
{
Fistpage.Enabled = true;
Prevpage.Enabled = true;
}
else
{
Fistpage.Enabled = false;
Prevpage.Enabled = false;
}
if (CurrentPage == Pages)
{
Nextpage.Enabled = false;
Lastpage.Enabled = false;
}
else
{
Nextpage.Enabled = true;
Lastpage.Enabled = true;
}
//数据绑定到DataList控件
DataSet ds = new DataSet();
//核心SQL语句,进行查询运算(决定了分页的效率:))
SqlDataAdapter MyAdapter = new SqlDataAdapter("Select Top "+PageSize+" * from redheadedfile where id




not in(select top "+PageSize*CurrentPage+" id from redheadedfile order by id asc) order by id asc",MyCon());
MyAdapter.Fill(ds,"news");
datalist1.DataSource = ds.Tables["news"].DefaultView;
datalist1.DataBind();
//显示Label控件LCurrentPaget和文本框控件gotoPage状态
LCurrentPage.Text = (CurrentPage+1).ToString();
gotoPage.Text = (CurrentPage+1).ToString();
//释放SqlDataAdapter
MyAdapter.Dispose();
}




#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///


/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///

private void InitializeComponent()
{
this.Fistpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_onClick);
this.Prevpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_onClick);
this.Nextpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_onClick);
this.Lastpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_onClick);
this.gotoPage.TextChanged += new System.EventHandler(this.gotoPage_TextChanged);
this.Load += new System.EventHandler(this.Page_Load);




}
#endregion
//跳页代码
private void gotoPage_TextChanged(object sender, System.EventArgs e)
{
try
{
JumpPage = (int)ViewState["JumpPages"];//从ViewState中读取可用页数值保存到JumpPage变量中
//判断用户输入值是否超过可用页数范围值
if(Int32.Parse(gotoPage.Text) > JumpPage || Int32.Parse(gotoPage.Text) <= 0)




Response.Write("");
else
{
int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//转换用户输入值保存在int型




InputPage变量中
ViewState["PageIndex"] = InputPage;//写入InputPage值到ViewState["PageIndex"]中
TDataBind();//调用数据绑定函数TDataBind()再次进行数据绑定运算
}
}
//捕获由用户输入不正确数据类型时造成的异常
catch(Exception exp)
{
Response.Write("");
}
}
}
}




大家来试试,效率是不是高了很多?




如有不妥望大家来指正




来源:网络












































添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.