简单的存储过程实现asp.net中的分页

我们在许多程序中都要用到查询数据,当信息量很大的时候,我们在检索信息,页面显示时候需要花费大量的

时间导致效率低下!
我们在检索信息的时候,只把当前需要的数据检索出来,也就是用常说的分页处理来提高处理效率!
浏览网页,发现很多网站,论坛都是采用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的分页相比,其效率应该更高!有时间再探讨其他分页方法

 

 

 

 

posted @ 2008-12-10 20:53  dwwwing  阅读(319)  评论(0编辑  收藏  举报