我们在许多程序中都要用到查询数据,当信息量很大的时候,我们在检索信息,页面显示时候需要花费大量的
时间导致效率低下!
我们在检索信息的时候,只把当前需要的数据检索出来,也就是用常说的分页处理来提高处理效率!
浏览网页,发现很多网站,论坛都是采用asp.net中的GridView自带的分页功能来处理数据分页。看起来非常简
单。实质上,当我们启动GridView中的分页后,数据源关联数据源控件,依旧会加载所有的信息。因此使用
GridView中的分页功能实质上在数据量较大的情况下是效率十分低下的!
我在这谈谈用存储过程来实现分页功能。
在这我给出我使用的表
create table New(
Num identity(1,1) not null,
Sort varchar(64) not null,
Title varchar(128) not null,
Author varchar(64) not null,
Matter text not null
)
go
构造存储过程如下:
CREATE PROCEDURE pro_New
@PageIndex INT, //显示的当前页数
@PageSize INT //每页显示大小
AS
/* 基于SQL SERVER 2005 */
SELECT Num,Title,SerialNumber FROM
(SELECT Title,Num,ROW_NUMBER() OVER (ORDER BY Num Asc) AS SerialNumber FROM New ) AS T
WHERE T.SerialNumber > ((@PageIndex-1) * @PageSize) and T.SerialNumber <= (@PageIndex*@PageSize)
go
其中定义的SerialNumber是为排序后的编号,因为把Num设置为自增长时,在删除记录后有可能出现空缺位!
特别注意的是,由于数据库中的第一页实际上是第0页。
public partial class _Default : System.Web.UI.Page
{
private NewsBiz biz = new NewsBiz();//此处调用业务逻辑层方法
public int pageSize = 10;//此为首页显示的数据为10条记录
private static readonly string connectionStrings =
ConfigurationManager.ConnectionStrings["NewsData"].ConnectionString;//连接Web.config
protected void Page_Load(object sender, EventArgs e)
{
int pageCount = Convert.ToInt32(cmd.ExecuteScalar());//总记录
int page = Convert.ToInt32(Request.QueryString.Get("id"));//页面传值获取页码
if (page == 0)
{
page = 1;
}
float temp = (float)pageCount / pageSize;//页数
if (page >= Convert.ToInt32(Math.Ceiling(temp)))
{
page = Convert.ToInt32(Math.Ceiling(temp));
}
//在此可绑定读取的数据源,也可自定义嵌入HTML代码
IList<NewsInfo> news = biz.SearchExec(page, pageSize);
GridView1.DataSource = news;
GridView1.DataBind();
//string html = null;
//for (int i = 0; i < news.Count; i++)
//{
// html += "<div align=\"center\">";
// html += "<a href=\"view.aspx?id=" + news[i].Num + "\" target=\"_blank>\"";
// html += "</a>";
// html += news[i].Title;
// html += "</div>";
//}
//showTd.InnerHtml = html;
if (!IsPostBack)//个人觉得这里很重要,因为对于asp.net的page(不是上面说的页码,是
page类)存在一个生命周期,每次向服务器发送请求,page都会被销毁重新load
{
pageNowTextBox.Text = page.ToString();
}
}
还有上一页,下一页等其他代码就不罗列出来了!明白了分页的思想实现起来都比较方便。
也许我这中方法不是很好的方法!但是与GridView的分页相比,其效率应该更高!有时间再探讨其他分页方法
!