`

ASP.NET实现Web数据分页浏览

阅读更多

利用ASP.NET开发Web数据库的查询功能模块时,为了减少网络流量,提高页面的访问速度,一般不会将所有的查询结果完全在一页中显示出来,而是将其按照一定规则分成多页进行显示,每页显示一定数目记录。应用数据记录分页技术,可以提高数据的查询性能及页面的显示速度,减轻数据库服务器的负担。


1 分页显示方法概述
 对Web数据库查询结果进行分页显示主要有两种实现方式,分别是浏览器端分页和服务器端分页。浏览器端分页是先将数据库中所有满足查询条件的记录一次性保存下来,然后通过设置每页要显示的记录数,再确定要显示记录的起点和终点来实现分页显示。服务器端分页是根据用户的请求,每次分别从满足查询条件的记录中将规定数目的记录数作读取并显示出来。
 为此,我们采用服务器端分页的方式。在浏览器端进行分页时,为了减少网络的流量,我们采用SQL Server的存储过程进行分页。


2  主要技术


2.1 ADO.NET类
在Web应用系统中,ASP.NET使用ADO.NET将系统前端的Web浏览器和后台的数据库之间联系起来。ADO.NET是.NET Framework提供的一系列类,提供了对关系数据、XML和应用程序数据的访问。

3  分页显示技术的实现
 在此,我们使用System.data.SqlClient(包含访问SQL Server数据库的类)对MS SQL Server2000进行操作,使用ASP.NET中的C#语言进行描述。以笔者开发的“在线考试系统”中的“查看学生留言信息模块”为例来说明该项技术的开发过程。

3.1连接数据库
 要访问数据,必须首先连接数据库,在此我们利用System.data.SqlClient.SqlConnection类来连接SQL Server中Student的数据库。用到主要属性和方法如下:

 

属性/方法

说明

ConnectionString

获取或设置用于打开SQL Server数据库的字符串

Open

使用ConnectionString所指定的属性设置打开数据库连接

Close

关闭与数据库的连接

 

连接字符串如下:

 

SqlConnection SCN = new SqlConnection("server=;database=BSNetExam;uid=sa;pwd=");

 

3.2 存储过程的建立

 

CREATE PROCEDURE PageCut

    @PageSize int=10 , -- 页面大小

    @PageIndex int=1  --当前页数

AS

    declare  @strSQL varchar(500)

    if @PageIndex=1

        set  @strSQL='select top'+str(@PageSize)+'* from tdbLevMess order by rqsj'

    else 

        set  @strSQL='select top'+str(@PageSize)+'  * from tdbLevMess where rqsj not in

        (select top  '+str((@PageIndex-1)*@PageSize)+'  rqsj from tdbpres)  order by rqsj' 

    exec(@strSQL)

GO

 

 

3.3操作数据库

    查询数据操作可以通过多种方式来实现,常用的对象包括SqlCommand对象(表示一个SQL查询或者一个存储过程)和SqlDataAdpater对象(把一个SqlCommand提交给SQL Server数据库)。在此,我们使用SqlCommand对象来操作数据库。

    SqlCommand类位于System.Data.SqlClient空间中,表示要对SQL Server数据库执行的一个Transact-SQL语句或存储过程。本例中用到的属性和方法如下:

属性/方法
 说明

CommandText
 获取或设置要对数据源执行的 Transact-SQL 语句或存储过程。
 
CommandType
 获取或设置一个值,该值指示如何解释 CommandText 属性。
 
Connection
 获取或设置 SqlCommand 的此实例使用的 SqlConnection。
 
Parameters
 获取 SqlParameterCollection。
 
ExecuteReader
 将 CommandText 发送到 Connection 并生成一个 SqlDataReader。
 

    SqlParameter类位于System.Data.SqlClient空间中,表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射。本例中用到的Value属性(获取或设置该参数的值)。

其实现程序如下:

 

SqlCommand SCM=new SqlCommand();  //定义SqlCommand类

SqlDataReader SDR;  //定义SqlDataReader类

private void GridView_Init(int PageSize,int PageIndex)

{

    SCN.Open(); //打开数据库连接

    SCM.Connection = SCN;

    SCM.CommandText = "pagecut"; //执行存储过程

    SCM.CommandType = CommandType.StoredProcedure;

    SqlParameter[] pares ={ new SqlParameter("@PageSize",SqlDbType.Int),

    new SqlParameter("@PageIndex",SqlDbType.Int)};

    pares[0].Value = PageSize;

    pares[1].Value = PageIndex;

    SCM.Parameters.Clear(); //清空参数

    foreach (SqlParameter parameter in pares)

    {

        SCM.Parameters.Add(parameter);

    }

    SDR = SCM.ExecuteReader(); //执行存储过程

    GridView1.DataSource = SDR;  //定义GridView的数据源

    GridView1.DataBind(); // GridView数据源绑定

    SCN.Close(); //关闭连接

}

 

 

3.4 程序的实现

    在Web窗体上,添加一个GridView控件(用于数据的显示),四个LinkButton(用作超级链接,分别为首页、上一页、下一页、末页),一个Label控件。将GridView控件的AllowPaging(是否在GridView中打开分页功能)属性设置为False。我们利用Session对象保存分页程序中的参数。具体程序如下:

 

 

protected void Page_Load(object sender, EventArgs e)

    {//页面初始化

        if (!IsPostBack)  //如果页面不是第一次加载

        {

            int PageCount,PageIndex,PageSize; //定义页面总数、当前页面号、每页记录数

            SCN.Open();

            SCM.CommandText = "select count(*) from tdbLevMess ";

            SCM.Connection = SCN;

            int ReCount = Convert.ToInt32(SCM.ExecuteScalar().ToString());//数据集记录总数

            SCN.Close();

            Session.Add("PageSize", 20); //为共享变量每页记录数PageSize赋值

            PageSize = Convert.ToInt16(Session["PageSize"]);//每页记录数为20

            PageCount=ReCount % PageSize == 0? ReCount / PageSize: ReCount / PageSize + 1;//计算页面的总页数

            Session.Add("PageCount", PageCount); //为共享变量总页数PageCount赋值

            PageIndex = 1;

            Session.Add("PageIndex", PageIndex); //为共享变量总页数PageIndex赋值

            GridView_Init (PageSize, PageIndex); //调用过程为GridView填充数据

            LinkButton1.Enabled = false, LinkButton2.Enabled = false;

            LinkButton3.Enabled = true,LinkButton4.Enabled = true;

            Label1.Text = "第"+PageIndex.ToString() + "页/共" + PageCount.ToString() + "页";

        }

    }

  protected void LinkButton2_Click(object sender, EventArgs e)

    {//上一页按钮

        int PageIndex = Convert.ToInt16( Session["PageIndex"] )- 1;

        int PageCount = Convert.ToInt16( Session["PageCount"]);

        Session.Add("PageIndex", PageIndex);

        int PageSize = Convert.ToInt16(Session["PageSize"]);

        if (PageIndex <= 1)

        {

            LinkButton1.Enabled = false;

            LinkButton2.Enabled = false;

        }

        LinkButton3.Enabled = true;

        LinkButton4.Enabled = true;

        GridView_Init(PageSize, PageIndex);

        Label1.Text = "第" + PageIndex.ToString() + "页/共" + PageCount.ToString() + "页";

    }

 

我们只给出了LinkButton2的代码(实现向上翻页),其它超级链接代码跟此相类似。

 

4   结束语

    查询分页技术是Web应用系统开发中经常遇到的重要工作,选择一种高效的查询分页技术,不仅能大大提高响应速度,而且能提高整个系统性能,节约服务器宝贵资源。

分享到:
评论

相关推荐

    asp.net,Datalist控件分页显示数据,绑定datatable

    asp.net,Datalist控件分页显示数据,绑定datatable 带有向前向后翻页

    ASP.net中大结果集的分页

    因此,在 asp.net中,分页很简单,但是默认的DataGrid分页事件会从数据库中把所 有的记录全部读出来放到asp.net web应用程序中。当你的数据在一百万以上的时候,这将引起 严重的性能问题(如果你不相信,你可以在你...

    asp.net MVC分页(多种)实例

    asp.net MVC web开发多种分页实例。

    ASP.NET中数据列表分页方法研究

    在以数据为中心的动态Web应用...本文结合ASP.NET与SQL(结构化查询语言)编程特性,深入研究了多种分页显示方法,并进行了相关性能的分析与比较,从而为不同应用环境而选用不同的分页技术,提供了较为完整的技术参考

    asp.net文章分页

    asp.net文章分页:当我们的新闻字数很多的时候,想要分页怎么办?本项目里就有全部的方法

    论文研究-ASP.NET中数据分页技术的研究.pdf

    数据分页是Web应用程序开发中经常使用的一种技术,也是提高Web数据访问性能的主要手段。结合ASP.NET的优点,详细分析了ASP.NET中各种数据分页技术,并通过分析试验结果比较了各种数据分页技术的优缺点。

    asp.net web 分页查询

    asp.net web 分页查询

    ASP.NET 自动分页控件 Web_AutoPageNum

    &lt;%@ Register Assembly="Web_AutoPageNum" Namespace="SomoWeb.Web_AutoPageNum" TagPrefix="Web_AutoPageNum" %&gt; 三、网页中使用如下: &lt;Web_AutoPageNum:Web_AutoPageNum runat="server" ID="Web_AutoPageNum1" /&gt;...

    Asp.Net MVC 的分页

    适用于 Asp.Net MVC 的分页。 也可以用于普通Asp.Net 分页,但需要适当修改。 本次使用 Asp.Net MVC 作为示例。 项目需要加载【 Newtonsoft.Json.dll】 组件。 数据库文件在【App_Data】文件中,附加到SQL2005即可...

    浅述asp.net海量分页数据存储过程

    数据分页是Web应用程序开发中经常使用的一种技术,也是提高Web数据访问性能的主要手段。本文结合ASP.NET,详细给出了两种ASP.NET海量分页数据存储的技术。

    .NET 通用分页控件

    分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,...

    asp.net中DataList控件自定义分页

    asp.net中DataList控件中的自定义分页技术。以及数据后台绑定技术。

    基于ASP.NET缓存与分页策略优化Web数据查询性能

    利用ASP.NET的缓存功能,结合性能良好的存储过程,一次性地缓存数据库数页数据,以供用户分页查询,是优化Web数据查询性能的比较理想的方式。文章详细介绍了优化模型的实现,并进行了性能分析

    asp.net分页设计

    该文讨论了在ASP.NET 框架下对WEB 数据库几种实现分页 显示的方法。对利用自带分页功能的数据控件(如:DataGrid)和对于没有自带分页功能的控件(如:DataList)进行分页分别结合实例 进行了详细的阐述。

    asp.net web 分页控件

    可以对于datagrid,repeater,datalist,进行快速分页 ,据说存储过程支持千万级数据库,没有测试过。 代码写起来很方便。 附带上数据库的存储过程。希望大家下载。

    Asp.net分页控件AspNetPager7.2

    分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,...

    ASP.NET常见问题集锦.zip

    ASP.NET中实现DataGrid数据排序.doc asp.net中的弹出对话框.doc ASP.NET中自定义控件的创建和使用.doc ASP.NET实现用户在线检测的类源码.txt ASP.NET常见问题集锦.zip ASP.NET弹出式日历选择控件的实现.doc ...

    asp.net开发常用整理集合

     Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取世界IP地址库显所在城市信息  ...

    asp.net针对SEO无控件分页

    asp.net针对SEO无控件分页达到SEO标准,没有用服务器控件,全是采用a标签和&lt;ul&gt;&lt;LI&gt;来实现分页,对于想学习SEo开发的朋友可以来下载学习一下, 本人就是做SEo开发的,如有不懂的可以加我的QQ:418688311

    ASP.NET 存储过程分页

    数据库在文件夹DataBase下。 自己附加。或者执行数据文件(因数据库不同) 自己去改下Web.config连接字符串

Global site tag (gtag.js) - Google Analytics