数据库组件 Hxj.Data (二十) (分页)

  
  
  
  
  
  
  
  
  
  分页在前面好几节中的列子中已经出现,现在在详细讲解一下。
  有三种方法去实现:
  1、Top(int topCount) 方法
  在sqlserver和msaccess中其实就是top , 在oracle通过rownum实现。
  2、From(int startIndex, int endIndex)
  从startIndex条到endIndex条之间的记录数。
  3、Page(int pageSize, int pageIndex)
  每页pageSize条,第pageIndex页
  下面就依次对这三个方法举例说明。
  top方法: 该查询时查询products表中的前10条记录,生成的sql语句如下:(如何输出查看组件生成的sql) 可以看出from方法和page方法生成的sql语句是格式是一样的,其实page方法最终还是调用from方法,
  如果from的startIndex参数等于1就会调用top方法来查询。
  默认情况下我们并没有设置排序,组件则会自动添加一个排序,如果有主键则选主键排序,不然选一个其他列排序。
  当然在很多情况下我们是需要设置哪些列排序的。
  例如:
  查询条件是categoryid等于2,按照unitprice倒叙排序,每页10条的第2页数据。
  生成的sql如下:
  Text:
  SELECT * FROM
  ( SELECTTOP 2 * FROM [Products] WHERE [Products].[CategoryID] = @bee7551993404c8592f07f9b01710bb5 ORDERBY [Products].[UnitPrice] ASC)
  AS temp_table ORDERBY [UnitPrice] DESC
  Parameters:
  @bee7551993404c8592f07f9b01710bb5[Int32] = 2
  这样的sql语句是不是出乎意料啊,原来符合条件的查询第二页只有2条数据,所以查询的时候就直接unitprice正序top 2就完结了。
  这样算是正常的生成格式了。
  以上的sql脚本都是在sql server2000下生成的。
  其实在查询过程中组建还会自动查询了count()符合条件的记录数,所以在大数据的情况下,效率不会很好。
  如果你设置组建的数据库是sql server2005则不会去查询 count,而是直接通过row_number()来查询,来获得更好的效率。(oracle则是rownum实现)
  下面来sql server2005例子:
  方法的调用还是一样的,所以如果from的参数startIndex等于1,还是优先使用top,并没有使用row_numer()。
  当然你觉得分页还不够理想,可以自己写sql或者存储过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值