分页查询的三种方法
来源:互联网 发布:中国编程语言排行榜 编辑:程序博客网 时间:2024/05/17 03:51
一. 基于SQL的分页查询
1、TOP法
/*
说明:先执行子查询排除前条记录,然后取剩余记录的前条记录
功能:查询第21~30条记录
*/
SELECT TOP 10 *
FROM books
WHERE id NOT IN (SELECT TOP 20 Id FROM books ORDER BY UnitPrice)
ORDER BY UnitPrice
2、ROW_NUMBER()法
/*
说明:使用ROW_NUMBER()为ORDER BY后面的字段分配行号
语法:ROW_NUMBER () OVER ( [ <partition_by_clause> ] <order_by_clause> )
功能:查询第21行到第30行记录
*/
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY UnitPrice) AS PriceRank,* FROM books) AS Rank
WHERE PriceRank BETWEEN 21 AND 30
ORDER BY UnitPrice
小结:
TOP法适用于多种数据库,而ROW_NUMBER()是微软SQL SERVER所提供的对结果集重新进行编号的函数,所以仅适用于数据库SQL SERVER。
从速度上讲,两者访问10万条记录时,所需的时间都差不多是20多秒,但TOP法总是比ROW_NUMBER()法快几秒钟。
在书写方面,ROW_NUMBER()法容易被人理解。
具体该选中何种方法,笔者认为应优先选用TOP法。
二. 基于PagedDataSource的分页
public partial class 上机_HotBookList : System.Web.UI.Page
{
//创建分页对象
PagedDataSource pdsPage = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
//判断是否是回传页
if (!IsPostBack)
{
//使用状态保持保存Page页数
ViewState["Page"] = 0;
}
Databind();
}
private void Databind()
{
//将返回的图书集合与
pdsPage.DataSource = BookManager.GetHotBooks();
//设置当前页
pdsPage.CurrentPageIndex = Pager;
//设置每页的大小
pdsPage.PageSize = 5;
//是否允许分页显示
pdsPage.AllowPaging = true;
//在Label控件中显示"第X页 共Y页"
lblCurrentPage.Text = "第" + (pdsPage.CurrentPageIndex + 1) + "页 共" + pdsPage.PageCount + "页";
//移除DataList对象的ObjectDataSource对象
DataList1.DataSourceID = "";
//将DataList对象的数据源与分页对象绑定
DataList1.DataSource = pdsPage;
DataList1.DataBind();
SetEnable();
}
private void SetEnable()
{
//hlBack、hlForward分别为HyperLink对象
hlBack.Enabled = true;
hlForward.Enabled = true;
//如果该页为第一页,则禁用【上一页】
if (pdsPage.IsFirstPage)
{
hlBack.Enabled = false;
}
//如果该页为最后一页,则禁用【下一页】
if (pdsPage.IsLastPage)
{
hlForward.Enabled = false;
}
}
//Pager属性
public int Pager
{
get
{
return (int)ViewState["Page"];
}
set
{
ViewState["Page"] = value;
}
}
//【下一页】的Click事件
protected void hlForward_Click(object sender, EventArgs e)
{
Pager++;//页数加一
Databind();
}
//【上一页】的Click事件
protected void hlBack_Click(object sender, EventArgs e)
{
Pager--;//页数减一
Databind();
}
}
基于SQL语句的分页和基于PagedDataSource的分页优缺点比较:
基于SQL语句的分页方式每次返回数据量较少(仅返回当前页所需数据),适合大数据量(百万数据级)的数据进行分页,只是代码编写比较复杂。
PagedDataSource使用比较方便,封装了分页常规的属性,但由于一次将所有数据读入,比较占用资源,一般适合数据量较少(一般不超过一万行),并且数据库服务器和Web服务器之间带宽不是瓶颈时使用(同一台计算机上不会有带宽问题)。
- Oracle分页查询的三种方法
- 分页查询的三种方法
- Oracle分页查询的三种方法
- Oracle分页查询的三种方法
- 【SQL】Oracle分页查询的三种方法
- Android SQLite分页查询的三种方法
- sqlserver三种分页查询方法
- 三种分页查询
- Oracle的三种分页查询
- JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
- JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
- JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
- MSSQL 分页查询的两种方法
- 分页查询的两种方法
- 三种分页方法
- SQL分页的三种方法
- SQL分页的三种方法
- SQL分页的三种方法
- 广受业余站长们青睐的Access数据库
- 西安:食肉种族的最爱
- Sql Server的存储过程或函数中单引号的表示
- 打开oracle的控制台输出功能
- oracle出现了ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- 分页查询的三种方法
- feof()与strtok()退出循环体的注意事项
- 2011TCO Qual Round A
- 查找纯win32c++程序的内存泄漏
- 中国IT实验室的java方面的视频
- springside3里面的hibernate
- 使用VC++和CRT库定位和排除内存泄漏
- 工作学习笔记——近期的几个技术问题
- solr启动时报错java.nio.channels.OverlappingFileLockException