架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 24161|回复: 1

[资料] c# 万能access数据库分页代码

[复制链接]
发表于 2016-6-17 19:06:56 | 显示全部楼层 |阅读模式
QQ截图20160617190431.jpg QQ截图20160617185909.jpg QQ截图20160617185851.jpg

上面是分页效果图和数据库表的内容,先付上主要的代码:

  1. // <summary>
  2.         /// 分页使用
  3.         /// </summary>
  4.         /// <param name="query"></param>
  5.         /// <param name="passCount"></param>
  6.         /// <returns></returns>
  7.         private string recordID(string query, int passCount)
  8.         {

  9.             OleDbCommand cmd = new OleDbCommand(query, Conn);
  10.             string result = string.Empty;
  11.             using (OleDbDataReader dr = cmd.ExecuteReader())
  12.             {
  13.                 while (dr.Read())
  14.                 {
  15.                     if (passCount < 1)
  16.                     {
  17.                         result += "," + dr.GetInt32(0);
  18.                     }
  19.                     passCount--;
  20.                 }
  21.             }
  22.             return result.Substring(1);
  23.             
  24.         }
  25.          /// <summary>
  26.         /// ACCESS高效分页
  27.         /// </summary>
  28.         /// <param name="pageIndex">当前页码</param>
  29.         /// <param name="pageSize">分页容量</param>
  30.         /// <param name="strKey">主键</param>
  31.         /// <param name="showString">显示的字段</param>
  32.         /// <param name="queryString">查询字符串,支持联合查询</param>
  33.         /// <param name="whereString">查询条件,若有条件限制则必须以where 开头</param>
  34.         /// <param name="orderString">排序规则</param>
  35.         /// <param name="pageCount">传出参数:总页数统计</param>
  36.         /// <param name="recordCount">传出参数:总记录统计</param>
  37.         /// <returns>装载记录的DataTable</returns>
  38.         public DataTable ExecutePager(int pageIndex, int pageSize, string strKey, string showString, string queryString, string whereString, string orderString, out int pageCount, out int recordCount)
  39.         {
  40.             if (pageIndex < 1) pageIndex = 1;
  41.             if (pageSize < 1) pageSize = 10;
  42.             if (string.IsNullOrEmpty(showString)) showString = "*";
  43.             if (string.IsNullOrEmpty(orderString)) orderString = strKey + " asc ";

  44.             string myVw = string.Format(" ( {0} ) tempVw ", queryString);
  45.             OleDbCommand cmdCount = new OleDbCommand(string.Format(" select count(*) as recordCount from {0} {1}", myVw, whereString), Conn);

  46.             recordCount = Convert.ToInt32(cmdCount.ExecuteScalar());

  47.             if ((recordCount % pageSize) > 0)
  48.                 pageCount = recordCount / pageSize + 1;
  49.             else
  50.                 pageCount = recordCount / pageSize;
  51.             OleDbCommand cmdRecord;
  52.             if (pageIndex == 1)//第一页
  53.             {
  54.                 cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, showString, myVw, whereString, orderString), Conn);
  55.             }
  56.             else if (pageIndex > pageCount)//超出总页数
  57.             {
  58.                 cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, showString, myVw, "where 1=2", orderString), Conn);
  59.             }
  60.             else
  61.             {
  62.                 int pageLowerBound = pageSize * pageIndex;
  63.                 int pageUpperBound = pageLowerBound - pageSize;
  64.                 string recordIDs = recordID(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageLowerBound, strKey, myVw, whereString, orderString), pageUpperBound);
  65.                 cmdRecord = new OleDbCommand(string.Format("select {0} from {1} where {2} in ({3}) order by {4} ", showString, myVw, strKey, recordIDs, orderString), Conn);

  66.             }
  67.             OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmdRecord);
  68.             DataTable dt = new DataTable();
  69.             dataAdapter.Fill(dt);
  70.             return dt;
  71.             
  72.         }
复制代码


再附上全部的dbhelp.cs,用下面这个即可:

  1. public class DBHelper
  2.     {
  3.         //变量声明处#region 变量声明处   
  4.         public OleDbConnection Conn;   
  5.         public string ConnString;//连接字符串  
  6.    
  7.    
  8.         //构造函数与连接关闭数据库#region 构造函数与连接关闭数据库   
  9.         /**//// <summary>   
  10.         /// 构造函数   
  11.         /// </summary>   
  12.         /// <param name="Dbpath">ACCESS数据库路径</param>   
  13.         public DBHelper(string Dbpath)   
  14.         {   
  15.             ConnString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=";   
  16.             //ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
  17.             ConnString += Dbpath;   
  18.             Conn = new OleDbConnection(ConnString);   
  19.             Conn.Open();   
  20.         }   
  21.    
  22.         /**//// <summary>   
  23.         /// 打开数据源链接   
  24.         /// </summary>   
  25.         /// <returns></returns>   
  26.         public OleDbConnection DbConn()   
  27.         {   
  28.             Conn.Open();   
  29.             return Conn;   
  30.         }   
  31.    
  32.         /**//// <summary>   
  33.         /// 请在数据传递完毕后调用该函数,关闭数据链接。   
  34.         /// </summary>   
  35.         public void Close()   
  36.         {   
  37.             Conn.Close();   
  38.         }  
  39.    
  40.    
  41.         //数据库基本操作#region 数据库基本操作   
  42.         /**//// <summary>   
  43.         /// 根据SQL命令返回数据DataTable数据表,   
  44.         /// 可直接作为dataGridView的数据源   
  45.         /// </summary>   
  46.         /// <param name="SQL"></param>   
  47.         /// <returns></returns>   
  48.         public DataTable SelectToDataTable(string SQL)   
  49.         {   
  50.             OleDbDataAdapter adapter = new OleDbDataAdapter();   
  51.             OleDbCommand command = new OleDbCommand(SQL, Conn);   
  52.             adapter.SelectCommand = command;   
  53.             DataTable Dt = new DataTable();   
  54.             adapter.Fill(Dt);      
  55.             return Dt;   
  56.         }   
  57.    
  58.         /**//// <summary>   
  59.         /// 根据SQL命令返回数据DataSet数据集,其中的表可直接作为dataGridView的数据源。   
  60.         /// </summary>   
  61.         /// <param name="SQL"></param>   
  62.         /// <param name="subtableName">在返回的数据集中所添加的表的名称</param>   
  63.         /// <returns></returns>   
  64.         public DataSet SelectToDataSet(string SQL, string subtableName)   
  65.         {   
  66.             OleDbDataAdapter adapter = new OleDbDataAdapter();   
  67.             OleDbCommand command = new OleDbCommand(SQL, Conn);   
  68.             adapter.SelectCommand = command;   
  69.             DataSet Ds = new DataSet();   
  70.             Ds.Tables.Add(subtableName);   
  71.             adapter.Fill(Ds, subtableName);   
  72.             return Ds;   
  73.         }   
  74.    
  75.         /**//// <summary>   
  76.         /// 在指定的数据集中添加带有指定名称的表,由于存在覆盖已有名称表的危险,返回操作之前的数据集。   
  77.         /// </summary>   
  78.         /// <param name="SQL"></param>   
  79.         /// <param name="subtableName">添加的表名</param>   
  80.         /// <param name="DataSetName">被添加的数据集名</param>   
  81.         /// <returns></returns>   
  82.         public DataSet SelectToDataSet (string SQL, string subtableName, DataSet DataSetName)   
  83.         {   
  84.             OleDbDataAdapter adapter = new OleDbDataAdapter();   
  85.             OleDbCommand command = new OleDbCommand(SQL, Conn);   
  86.             adapter.SelectCommand = command;   
  87.             DataTable Dt = new DataTable();   
  88.             DataSet Ds = new DataSet();   
  89.             Ds = DataSetName;   
  90.             adapter.Fill(DataSetName, subtableName);   
  91.             return Ds;   
  92.         }   
  93.    
  94.         /**//// <summary>   
  95.         /// 根据SQL命令返回OleDbDataAdapter,   
  96.         /// 使用前请在主程序中添加命名空间System.Data.OleDb   
  97.         /// </summary>   
  98.         /// <param name="SQL"></param>   
  99.         /// <returns></returns>   
  100.         public OleDbDataAdapter SelectToOleDbDataAdapter(string SQL)   
  101.         {   
  102.             OleDbDataAdapter adapter = new OleDbDataAdapter();   
  103.             OleDbCommand command = new OleDbCommand(SQL, Conn);   
  104.             adapter.SelectCommand = command;   
  105.             return adapter;   
  106.         }   
  107.    
  108.         /**//// <summary>   
  109.         /// 执行SQL命令,不需要返回数据的修改,删除可以使用本函数   
  110.         /// </summary>   
  111.         /// <param name="SQL"></param>   
  112.         /// <returns></returns>   
  113.         public bool ExecuteSQLNonquery(string SQL)   
  114.         {   
  115.             OleDbCommand cmd = new OleDbCommand(SQL, Conn);   
  116.             try
  117.             {   
  118.                 cmd.ExecuteNonQuery();   
  119.                 return true;   
  120.             }   
  121.             catch
  122.             {   
  123.                 return false;   
  124.             }   
  125.         }


  126.         // <summary>
  127.         /// 分页使用
  128.         /// </summary>
  129.         /// <param name="query"></param>
  130.         /// <param name="passCount"></param>
  131.         /// <returns></returns>
  132.         private string recordID(string query, int passCount)
  133.         {

  134.             OleDbCommand cmd = new OleDbCommand(query, Conn);
  135.             string result = string.Empty;
  136.             using (OleDbDataReader dr = cmd.ExecuteReader())
  137.             {
  138.                 while (dr.Read())
  139.                 {
  140.                     if (passCount < 1)
  141.                     {
  142.                         result += "," + dr.GetInt32(0);
  143.                     }
  144.                     passCount--;
  145.                 }
  146.             }
  147.             return result.Substring(1);
  148.             
  149.         }
  150.          /// <summary>
  151.         /// ACCESS高效分页
  152.         /// </summary>
  153.         /// <param name="pageIndex">当前页码</param>
  154.         /// <param name="pageSize">分页容量</param>
  155.         /// <param name="strKey">主键</param>
  156.         /// <param name="showString">显示的字段</param>
  157.         /// <param name="queryString">查询字符串,支持联合查询</param>
  158.         /// <param name="whereString">查询条件,若有条件限制则必须以where 开头</param>
  159.         /// <param name="orderString">排序规则</param>
  160.         /// <param name="pageCount">传出参数:总页数统计</param>
  161.         /// <param name="recordCount">传出参数:总记录统计</param>
  162.         /// <returns>装载记录的DataTable</returns>
  163.         public DataTable ExecutePager(int pageIndex, int pageSize, string strKey, string showString, string queryString, string whereString, string orderString, out int pageCount, out int recordCount)
  164.         {
  165.             if (pageIndex < 1) pageIndex = 1;
  166.             if (pageSize < 1) pageSize = 10;
  167.             if (string.IsNullOrEmpty(showString)) showString = "*";
  168.             if (string.IsNullOrEmpty(orderString)) orderString = strKey + " asc ";

  169.             string myVw = string.Format(" ( {0} ) tempVw ", queryString);
  170.             OleDbCommand cmdCount = new OleDbCommand(string.Format(" select count(*) as recordCount from {0} {1}", myVw, whereString), Conn);

  171.             recordCount = Convert.ToInt32(cmdCount.ExecuteScalar());

  172.             if ((recordCount % pageSize) > 0)
  173.                 pageCount = recordCount / pageSize + 1;
  174.             else
  175.                 pageCount = recordCount / pageSize;
  176.             OleDbCommand cmdRecord;
  177.             if (pageIndex == 1)//第一页
  178.             {
  179.                 cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, showString, myVw, whereString, orderString), Conn);
  180.             }
  181.             else if (pageIndex > pageCount)//超出总页数
  182.             {
  183.                 cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, showString, myVw, "where 1=2", orderString), Conn);
  184.             }
  185.             else
  186.             {
  187.                 int pageLowerBound = pageSize * pageIndex;
  188.                 int pageUpperBound = pageLowerBound - pageSize;
  189.                 string recordIDs = recordID(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageLowerBound, strKey, myVw, whereString, orderString), pageUpperBound);
  190.                 cmdRecord = new OleDbCommand(string.Format("select {0} from {1} where {2} in ({3}) order by {4} ", showString, myVw, strKey, recordIDs, orderString), Conn);

  191.             }
  192.             OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmdRecord);
  193.             DataTable dt = new DataTable();
  194.             dataAdapter.Fill(dt);
  195.             return dt;
  196.             
  197.         }
  198.     }
复制代码



调用的方法,其实,在传参的时候,已经写的很明白了,但是,还是附上演示代码吧!

  1. public JsonResult ALLUser()
  2.         {
  3.             object sss = new List<string>();
  4.             string draw = Request["draw"];  //请求次数
  5.             //获取分页参数
  6.             var bytes = new byte[Request.InputStream.Length];
  7.             Request.InputStream.Position = 0;
  8.             Request.InputStream.Read(bytes, 0, bytes.Length);
  9.             string str = System.Text.Encoding.UTF8.GetString(bytes);
  10.             string start = Config.GetParams("start", str);  //开始条数
  11.             string length = Config.GetParams("length", str);    //分页数



  12.             string select = "select * from [tb_User]";

  13.             int pagr_count;
  14.             int row_count;
  15.             DataTable dt = Config.db.ExecutePager((int.Parse(start) / int.Parse(length)) + 1, int.Parse(length), "ID", "ID,UserName,Pwd,Email,CreateTime,Status,Auth", select, null, "ID DESC", out pagr_count, out row_count);
  16.             //DataTable dt = Config.db.SelectToDataTable(select);
  17.             if (dt.Rows.Count > 0)
  18.             {
  19.                 List<Models.tb_User> List = new List<Models.tb_User>();
  20.                 foreach (DataRow dr in dt.Rows)
  21.                 {
  22.                     ThroughTrain.Admin.Models.tb_User user = new Models.tb_User();
  23.                     user.ID = Convert.ToInt32(dr["ID"].ToString());
  24.                     user.UserName = dr["UserName"].ToString();
  25.                     user.Password = dr["Pwd"].ToString();
  26.                     user.Email = dr["Email"].ToString();
  27.                     user.CreateTime = dr["CreateTime"].ToString();
  28.                     user.Status = Convert.ToInt32(dr["Status"].ToString());
  29.                     user.Auth = Convert.ToInt32(dr["Auth"].ToString());
  30.                     List.Add(user);
  31.                 }
  32.                 //return Json(new { draw = Convert.ToInt32(draw), recordsTotal = dt.Rows.Count, recordsFiltered = dt.Rows.Count, data = List });
  33.                 return Json(new { draw = Convert.ToInt32(draw), recordsTotal = row_count, recordsFiltered = row_count, data = List });
  34.             }
  35.             else {
  36.                 return Json(new { draw = Convert.ToInt32(draw), recordsTotal = 0, recordsFiltered = 0, data = sss });
  37.             }
  38.         }
复制代码






上一篇:Windows下80端口被进程System&amp;PID=4占用的解决方法
下一篇:开机提示invalid partition table的解决方案
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-6-12 07:27:53 | 显示全部楼层
谢谢楼主分享
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

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

Mail To:help@itsvse.com

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

GMT+8, 2026-7-18 13:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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