1. /// <summary>
  2. /// 获得查询分页数据
  3. /// </summary>
  4. public DataSet GetList(int pageSize, int pageIndex, string strWhere, string filedOrder, out int recordCount)
  5. {
  6. StringBuilder strSql = new StringBuilder();
  7. strSql.Append("select * FROM view_get_car_hl_faultcode");
  8. if (strWhere.Trim() != "")
  9. {
  10. strSql.Append(" where " + strWhere);
  11. }
  12. recordCount = Convert.ToInt32(DbHelperSQL.GetSingle(PagingHelper.CreateCountingSql(strSql.ToString())));
  13. return DbHelperSQL.Query(PagingHelper.CreatePagingSql(recordCount, pageSize, pageIndex, strSql.ToString(), filedOrder));
  14. }
  1. DbHelperSQL.GetSingleDbHelperSQL.Query是一个访问数据库的公共类库,第一个为获取总数,第二个为根据sql语句获取DataSet
  1. PagingHelper类中的内容如下:
  1. /// <summary>
  2. /// 双TOP二分法生成分页SQL类(支持MSSQL、ACCESS)
  3. /// </summary>
  4. public static class PagingHelper
  5. {
  6. /// <summary>
  7. /// 获取分页SQL语句,排序字段需要构成唯一记录
  8. /// </summary>
  9. /// <param name="_recordCount">记录总数</param>
  10. /// <param name="_pageSize">每页记录数</param>
  11. /// <param name="_pageIndex">当前页数</param>
  12. /// <param name="_safeSql">SQL查询语句</param>
  13. /// <param name="_orderField">排序字段,多个则用“,”隔开</param>
  14. /// <returns>分页SQL语句</returns>
  15. public static string CreatePagingSql(int _recordCount, int _pageSize, int _pageIndex, string _safeSql, string _orderField)
  16. {
  17. //重新组合排序字段,防止有错误
  18. string[] arrStrOrders = _orderField.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  19. StringBuilder sbOriginalOrder = new StringBuilder(); //原排序字段
  20. StringBuilder sbReverseOrder = new StringBuilder(); //与原排序字段相反,用于分页
  21. for (int i = ; i < arrStrOrders.Length; i++)
  22. {
  23. arrStrOrders[i] = arrStrOrders[i].Trim(); //去除前后空格
  24. if (i != )
  25. {
  26. sbOriginalOrder.Append(", ");
  27. sbReverseOrder.Append(", ");
  28. }
  29. sbOriginalOrder.Append(arrStrOrders[i]);
  30.  
  31. int index = arrStrOrders[i].IndexOf(" "); //判断是否有升降标识
  32. if (index > )
  33. {
  34. //替换升降标识,分页所需
  35. bool flag = arrStrOrders[i].IndexOf(" DESC", StringComparison.OrdinalIgnoreCase) != -;
  36. sbReverseOrder.AppendFormat("{0} {1}", arrStrOrders[i].Remove(index), flag ? "ASC" : "DESC");
  37. }
  38. else
  39. {
  40. sbReverseOrder.AppendFormat("{0} DESC", arrStrOrders[i]);
  41. }
  42. }
  43.  
  44. //计算总页数
  45. _pageSize = _pageSize == ? _recordCount : _pageSize;
  46. int pageCount = (_recordCount + _pageSize - ) / _pageSize;
  47.  
  48. //检查当前页数
  49. if (_pageIndex < )
  50. {
  51. _pageIndex = ;
  52. }
  53. else if (_pageIndex > pageCount)
  54. {
  55. _pageIndex = pageCount;
  56. }
  57.  
  58. StringBuilder sbSql = new StringBuilder();
  59. //第一页时,直接使用TOP n,而不进行分页查询
  60. if (_pageIndex == )
  61. {
  62. sbSql.AppendFormat(" SELECT TOP {0} * ", _pageSize);
  63. sbSql.AppendFormat(" FROM ({0}) AS T ", _safeSql);
  64. sbSql.AppendFormat(" ORDER BY {0} ", sbOriginalOrder.ToString());
  65. }
  66. //最后一页时,减少一个TOP
  67. else if (_pageIndex == pageCount)
  68. {
  69. sbSql.Append(" SELECT * FROM ");
  70. sbSql.Append(" ( ");
  71. sbSql.AppendFormat(" SELECT TOP {0} * ", _recordCount - _pageSize * (_pageIndex - ));
  72. sbSql.AppendFormat(" FROM ({0}) AS T ", _safeSql);
  73. sbSql.AppendFormat(" ORDER BY {0} ", sbReverseOrder.ToString());
  74. sbSql.Append(" ) AS T ");
  75. sbSql.AppendFormat(" ORDER BY {0} ", sbOriginalOrder.ToString());
  76. }
  77. //前半页数时的分页
  78. else if (_pageIndex <= (pageCount / + pageCount % ) + )
  79. {
  80. sbSql.Append(" SELECT * FROM ");
  81. sbSql.Append(" ( ");
  82. sbSql.AppendFormat(" SELECT TOP {0} * FROM ", _pageSize);
  83. sbSql.Append(" ( ");
  84. sbSql.AppendFormat(" SELECT TOP {0} * ", _pageSize * _pageIndex);
  85. sbSql.AppendFormat(" FROM ({0}) AS T ", _safeSql);
  86. sbSql.AppendFormat(" ORDER BY {0} ", sbOriginalOrder.ToString());
  87. sbSql.Append(" ) AS T ");
  88. sbSql.AppendFormat(" ORDER BY {0} ", sbReverseOrder.ToString());
  89. sbSql.Append(" ) AS T ");
  90. sbSql.AppendFormat(" ORDER BY {0} ", sbOriginalOrder.ToString());
  91. }
  92. //后半页数时的分页
  93. else
  94. {
  95. sbSql.AppendFormat(" SELECT TOP {0} * FROM ", _pageSize);
  96. sbSql.Append(" ( ");
  97. sbSql.AppendFormat(" SELECT TOP {0} * ", ((_recordCount % _pageSize) + _pageSize * (pageCount - _pageIndex) + ));
  98. sbSql.AppendFormat(" FROM ({0}) AS T ", _safeSql);
  99. sbSql.AppendFormat(" ORDER BY {0} ", sbReverseOrder.ToString());
  100. sbSql.Append(" ) AS T ");
  101. sbSql.AppendFormat(" ORDER BY {0} ", sbOriginalOrder.ToString());
  102. }
  103. return sbSql.ToString();
  104. }
  105.  
  106. /// <summary>
  107. /// 获取记录总数SQL语句
  108. /// </summary>
  109. /// <param name="_n">限定记录数</param>
  110. /// <param name="_safeSql">SQL查询语句</param>
  111. /// <returns>记录总数SQL语句</returns>
  112. public static string CreateTopnSql(int _n, string _safeSql)
  113. {
  114. return string.Format(" SELECT TOP {0} * FROM ({1}) AS T ", _n, _safeSql);
  115. }
  116.  
  117. /// <summary>
  118. /// 获取记录总数SQL语句
  119. /// </summary>
  120. /// <param name="_safeSql">SQL查询语句</param>
  121. /// <returns>记录总数SQL语句</returns>
  122. public static string CreateCountingSql(string _safeSql)
  123. {
  124. return string.Format(" SELECT COUNT(1) AS RecordCount FROM ({0}) AS T ", _safeSql);
  125. }
  126. }
  1.  

NET项目中分页方法的更多相关文章

  1. vue 项目中命名方法

    命名 命名的方法通常有以下几类: 命名法说明 1).camel命名法,形如thisIsAnApple 2).pascal命名法,形如ThisIsAnApple 3).下划线命名法,形如this_is_ ...

  2. ASP.NET MVC jQuery 树插件在项目中使用方法(一)

    jsTree是一个 基于jQuery的Tree控件.支持XML,JSON,Html三种数据源.提供创建,重命名,移动,删除,拖"放节点操作.可以自己自定义创建,删 除,嵌套,重命名,选择节点 ...

  3. spring项目中service方法开启线程处理业务的事务问题

    1.前段时间在维护项目的时候碰到一个问题,具体业务就是更新已有角色的资源,数据库已更新,但是权限控制不起效果,还是保留原来的权限. 2.排查发现原有的代码在一个service方法里有进行资源权限表的更 ...

  4. 在MVC项目中分页使用MvcPager插件

    参考网站  http://www.webdiyer.com/mvcpager/demos/ 这个插件非常简单易用,如果想快速使用 可以参考我这篇文章,其实参考网站也是非常简单的 首先选择你的web项目 ...

  5. 前端项目中公共方法汇总utils.js

    目录 判断手机类型IOS Android 格式化金钱 金钱字符串变回数字 用aa替换中文 并返回 去除文件后缀,得到文件名称(不带后缀) 获取浏览器类型(名称) post方式下载文件流 动态设置img ...

  6. 基于SpringBoot项目MyBatis分页插件实现分页总结

    前言 在使用Mybatis时,最头痛的就是写分页了,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真的不想花双倍的时间写 count 和 se ...

  7. 分析spring事务@Transactional注解在同一个类中的方法之间调用不生效的原因及解决方案

    问题: 在Spring管理的项目中,方法A使用了Transactional注解,试图实现事务性.但当同一个class中的方法B调用方法A时,会发现方法A中的异常不再导致回滚,也即事务失效了. 当这个方 ...

  8. 项目中的一个分页功能pagination

    项目中的一个分页功能pagination <script> //总页数 ; ; //分页总数量 $(function () { // $("#pagination"). ...

  9. asp.netMVC中实现分页方法

    方法一:使用传统的sql语句实现分页,    public class UserprintDao如下 /// <summary> /// 取得用户申请记录列表(按分页) /// </ ...

随机推荐

  1. monokai-background

    foreground-color:f8f8f2 background-color:272822

  2. Data Structure Array: Longest Monotonically Increasing Subsequence Size

    http://www.geeksforgeeks.org/longest-monotonically-increasing-subsequence-size-n-log-n/ #include < ...

  3. flex 动画笔记

    1.不涉及到组件宽度和高度变化的 如果类似showEffect等属性不好使的,直接使用hideEffect.end(); showEffect.play();等这样的用法. 2.涉及到组件宽度和高度变 ...

  4. [原创]java WEB学习笔记05:Servlet中的ServletConfig对象

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. SS中的三种样式来源:创作人员、读者和用户代理

    CSS中的样式一共有三种来源:创作人员.读者和用户代理,来源的不同会影响到样式的层叠方式,很多第一次学习CSS的朋友,对这三种来源可能会存在一些困惑,下面我写一下自己的理解,若有错误的地方还请指正. ...

  6. Java -- 键盘输入 Scanner, BufferedReader。 系统相关System,Runtime。随机数 Randrom。日期操作Calendar

    1. Scanner 一个基于正则表达式的文本扫描器,他有多个构造函数,可以从文件,输入流和字符串中解析出基本类型值和字符串值. public class Main { public static v ...

  7. Storm- Storm作业提交运行流程

    用户编写Storm Topology 使用client提交Topology给Nimbus Nimbus指派Task给Supervisor Supervisor为Task启动Worker Worker执 ...

  8. Mac系统给移动硬盘分区(图文)

    刚买的硬盘500G   准备分几个区 移动硬盘分区格式化有3中形式: 1.Mac OS 扩展日志 格式 此格式mac专用,这种格式的硬盘在PC上不可见,可以用来给 Time Machine 备份, T ...

  9. 一個在WCF學習中的小教訓(本人非科班菜鳥,此經驗無參考價值,衹是自己的經驗記錄)

    1.关于“ServiceHost 仅支持类服务类型”的解决:   Service属性必须执行,不是接口. 改为下图所示: 解决! (注:按朱哥的方法WCF已经可以通信---截至今天的11:11(例子在 ...

  10. SpringBoot_03_依赖本地jar

    一.方法一 1.说明 用Maven打到本地仓库,然后直接引入 2.参考资料 Springboot 打Jar包,Maven完美解决本地Jar包自动打入Springboot Jar包中 3.执行maven ...