学习篇:sql语句分页
今天,折腾了一下分页,做的是简单的sql语句分页。别的分页,像存储过程啥的,以后会慢慢学习。
sql语句分页核心代码不过就是:
select * from (select row_number() over(ordery by id) as num,* from A) as t where num>10 && num <=20
自己手敲了一下,高手看见指点一下吧,为什么非要这么来写啊。
然后,我自己做的这个项目是三层架构,所以说:我还是很专业的是吧。
我写三层,喜欢从DAL层开始写,所以,下面我就从DAL层开始说起了。
1.首先DAL层中,根据需要查询出来需要展示的数据(也就是一页)。
public DataSet GetPageData(int start, int end) { string sql = "select * from (select row_number() over(order by id) as num,* from books ) as t where num >= @start and num <= @end"; SqlParameter[] pams = { new SqlParameter("@start",start), new SqlParameter("@end",end), }; return DbHelperSQL.Query(sql, pams); }
当然,想要分页必须要知道总条数吧,所以,就有了下面这个方法了。
public int GetRecordCount() { string sql = "select count(1) from Books"; return Convert.ToInt32(DbHelperSQL.GetSingle(sql)); }
把分类,排序啥的去掉了,只剩下实实在在的分页了。
2.然后就是BLL层,主要是逻辑方面的东西。
public List<Model.Books> GetPageList(int pageNum, int pageSize) { //计算出每页开始的 num int start = (pageNum - 1) * pageSize + 1; //计算出此页结束的 num int end = pageNum * pageSize; DataSet ds = dal.GetPageData(start, end); return DataTableToList(ds.Tables[0]); //这个方法是代码生成器生成的方法。 }
public int GetPageCount(int pageSize) { int recordCount = dal.GetRecordCount(); int pageCount = Convert.ToInt32(Math.Ceiling((double)recordCount / pageSize)); return pageCount; }
3.UI层,即将闪亮登场了。用的是Repeater服务端控件来绑定数据的。所以,请看....
private void BindRepeater(int pageNum) { BLL.Books bll = new BLL.Books();this.Repeater1.DataSource = bll.GetPageList(pageNum, 10); this.Repeater1.DataBind(); }
把上面的代码在page_load里面调用下,就OK了.....
呵呵~~~!
A:BZ骗人,这叫啥子分页.....太浪费感情了.....
连个简单的分页标签都木有。 让我再后台改代码实现分页吗....
哎~,太浪费感情了....
2月18号:那谁...这事你怎么看?
那谁:请BZ明断~!
2月18号:抛砖引玉,抛砖引玉....额,哈哈。。哈哈。。