架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 18263|回复: 2

[资料] Mysql万能分页存储过程

[复制链接]
发表于 2016-7-21 15:04:29 | 显示全部楼层 |阅读模式
  1. DROP PROCEDURE IF EXISTS `pPage`;  
  2. DELIMITER ;;  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `pPage`(in _pagecurrent int, /*当前页*/  
  4. in _pagesize int,        /*每页的记录数*/  
  5. in _ifelse varchar(1000),/*显示字段*/  
  6. in _where varchar(1000), /*条件*/  
  7. in _order varchar(1000))  
  8.     COMMENT '分页存储过程\r\n调用例1  call sp_Page(1,3,''*'',''test'',''order by id desc'');\r\n'  
  9. BEGIN  
  10. if _pagesize<=1 then  
  11.   set _pagesize=20;  
  12. end if;  
  13. if _pagecurrent < 1 then  
  14.   set _pagecurrent = 1;  
  15. end if;  
  16.    
  17. set @strsql = concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize);  
  18. prepare stmtsql from @strsql;  
  19. execute stmtsql;  
  20. deallocate prepare stmtsql;   
  21.   
  22. set @strsqlcount=concat('select count(0) AS count from ',_where);/*count(1) 这个字段最好是主键*/  
  23. prepare stmtsqlcount from @strsqlcount;  
  24. execute stmtsqlcount;  
  25. deallocate prepare stmtsqlcount;  
  26.   
  27. END  
  28. ;;  
  29. DELIMITER ;  
复制代码






上一篇:Mysql表字段和变量一致的解决方法
下一篇:c#创建日期文件夹
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-7-21 15:21:54 | 显示全部楼层
对应的.net方法

  1. public List<T> Get<T>(int _pagecurrent, int _pagesize, string _ifelse, string _where, string _order)
  2.         {
  3.             try
  4.             {
  5.                 MySqlParameter[] parmeter = new MySqlParameter[5];
  6.                 parmeter[0] = new MySqlParameter("_pagecurrent", _pagecurrent);
  7.                 parmeter[1] = new MySqlParameter("_pagesize", _pagesize);
  8.                 parmeter[2] = new MySqlParameter("_ifelse", _ifelse);
  9.                 parmeter[3] = new MySqlParameter("_where", _where);
  10.                 parmeter[4] = new MySqlParameter("_order", _order);
  11.                 DataSet ds = BucketDiagram.DataAccess.MySqlHelper.GetDataSet(Config.SqlConn, CommandType.StoredProcedure, "pPage", parmeter);
  12.                 if (ds != null && ds.Tables.Count > 0)
  13.                 {
  14.                     List<T> list = ds.Tables[0].ToListFromDataTable<T>();
  15.                     return list;
  16.                 }
  17.                 else {
  18.                     return null;
  19.                 }
  20.             }
  21.             catch (Exception ex)
  22.             {
  23.                 return null;
  24.             }
  25.         }
复制代码


码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-8-2 20:39:36 | 显示全部楼层
  1. /// <summary>
  2.     /// 万能分页
  3.     /// </summary>
  4.     /// <typeparam name="T"></typeparam>
  5.     public abstract class pPage
  6.     {
  7.         protected List<T> Get<T>(int _pagecurrent, int _pagesize, string _ifelse, string _where, string _order,out int count)
  8.         {
  9.             count = 0;
  10.             try
  11.             {
  12.                 MySqlParameter[] parmeter = new MySqlParameter[5];
  13.                 parmeter[0] = new MySqlParameter("_pagecurrent", _pagecurrent);
  14.                 parmeter[1] = new MySqlParameter("_pagesize", _pagesize);
  15.                 parmeter[2] = new MySqlParameter("_ifelse", _ifelse);
  16.                 parmeter[3] = new MySqlParameter("_where", _where);
  17.                 parmeter[4] = new MySqlParameter("_order", _order);
  18.                 DataSet ds = BucketDiagram.DataAccess.MySqlHelper.GetDataSet(Config.SqlConn, CommandType.StoredProcedure, "pPage", parmeter);
  19.                 if (ds != null && ds.Tables.Count > 0)
  20.                 {
  21.                     //总条数
  22.                     count = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
  23.                     //List<T> list = ds.Tables[0].ToListFromDataTable<T>();
  24.                     List<T> list = ConvertTo<T>(ds.Tables[0]).ToList();
  25.                     return list;
  26.                 }
  27.                 else {
  28.                     return null;
  29.                 }
  30.             }
  31.             catch (Exception ex)
  32.             {
  33.                 return null;
  34.             }
  35.         }

  36.         public static IList<T> ConvertTo<T>(DataTable table)
  37.         {
  38.             if (table == null)
  39.             {
  40.                 return null;
  41.             }

  42.             List<DataRow> rows = new List<DataRow>();

  43.             foreach (DataRow row in table.Rows)
  44.             {
  45.                 rows.Add(row);
  46.             }

  47.             return ConvertTo<T>(rows);
  48.         }

  49.         public static IList<T> ConvertTo<T>(IList<DataRow> rows)
  50.         {
  51.             IList<T> list = null;

  52.             if (rows != null)
  53.             {
  54.                 list = new List<T>();

  55.                 foreach (DataRow row in rows)
  56.                 {
  57.                     T item = CreateItem<T>(row);
  58.                     list.Add(item);
  59.                 }
  60.             }

  61.             return list;
  62.         }
  63.         public static T CreateItem<T>(DataRow row)
  64.         {
  65.             T obj = default(T);
  66.             if (row != null)
  67.             {
  68.                 obj = Activator.CreateInstance<T>();

  69.                 foreach (DataColumn column in row.Table.Columns)
  70.                 {
  71.                     PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
  72.                     try
  73.                     {
  74.                         object value = row[column.ColumnName];
  75.                         prop.SetValue(obj, value, null);
  76.                     }
  77.                     catch
  78.                     {  //You can log something here     
  79.                         //throw;   
  80.                     }
  81.                 }
  82.             }

  83.             return obj;
  84.         }
  85.     }
复制代码


正确的写法
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-8-27 12:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表