--第一页数据 select top 2 id,SerialNumber,AddTime from TB_Voucher --第n页数据(n>1) 2*1 2*2 SELECT TOP 2 id,SerialNumber,AddTime from TB_Voucher where (id > (SELECT MAX(id) FROM (SELECT TOP 6 id FROM TB_Voucher ORDER BY id) AS T)) ORDER BY ID /// <summary> /// 分页使用 /// </summary> /// <param name="query"></param> /// <param name="passCount"></param> /// <returns></returns> private static string recordID(string query, int passCount) { using (OleDbConnection m_Conn = new OleDbConnection(ConnectionString)) { m_Conn.Open(); OleDbCommand cmd = new OleDbCommand(query, m_Conn); string result = string.Empty; using (OleDbDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { if (passCount < 1) { result += "," + dr.GetInt32(0); } passCount--; } } m_Conn.Close(); m_Conn.Dispose(); return result.Substring(1); } } /// <summary> /// ACCESS高效分页 /// </summary> /// <param name="pageIndex">当前页码</param> /// <param name="pageSize">分页容量</param> /// <param name="strKey">主键</param> /// <param name="showString">显示的字段</param> /// <param name="queryString">查询字符串,支持联合查询</param> /// <param name="whereString">查询条件,若有条件限制则必须以where 开头</param> /// <param name="orderString">排序规则</param> /// <param name="pageCount">传出参数:总页数统计</param> /// <param name="recordCount">传出参数:总记录统计</param> /// <returns>装载记录的DataTable</returns> public static DataTable ExecutePager(int pageIndex, int pageSize, string strKey,string showString, string queryString, string whereString, string orderString, out int pageCount, out int recordCount) { if (pageIndex < 1) pageIndex = 1; if (pageSize < 1) pageSize = 10; if (string.IsNullOrEmpty(showString)) showString = "*"; if (string.IsNullOrEmpty(orderString)) orderString = strKey+" asc "; using (OleDbConnection m_Conn = new OleDbConnection(ConnectionString)) { m_Conn.Open(); string myVw = string.Format(" ( {0} ) tempVw ", queryString); OleDbCommand cmdCount = new OleDbCommand(string.Format(" select count(*) as recordCount from {0} {1}", myVw, whereString), m_Conn); recordCount = Convert.ToInt32(cmdCount.ExecuteScalar()); if ((recordCount % pageSize) > 0) pageCount = recordCount / pageSize + 1; else pageCount = recordCount / pageSize; OleDbCommand cmdRecord; if (pageIndex == 1)//第一页 { cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, showString, myVw, whereString, orderString), m_Conn); } else if (pageIndex > pageCount)//超出总页数 { cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, showString, myVw, "where 1=2", orderString), m_Conn); } else { int pageLowerBound = pageSize * pageIndex; int pageUpperBound = pageLowerBound - pageSize; string recordIDs = recordID(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageLowerBound, strKey, myVw, whereString, orderString), pageUpperBound); cmdRecord = new OleDbCommand(string.Format("select {0} from {1} where {2} in ({3}) order by {4} ", showString, myVw,strKey, recordIDs, orderString), m_Conn); } OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmdRecord); DataTable dt = new DataTable(); dataAdapter.Fill(dt); m_Conn.Close(); m_Conn.Dispose(); return dt; } }
public static System.Data.DataSet getPageTable(int pageSize, int pageIndex, string tab, string show, string where, string order, bool mulit) { if (pageIndex < 1) { pageIndex = 1; }; if (pageSize < 1) { pageSize = 1; }; StringBuilder sb = new StringBuilder(); if (pageIndex == 1) { if (string.IsNullOrEmpty(where)) { sb.AppendFormat("select COUNT(0) from {0};select top {1} {2} from {0} order by {3}", tab, pageSize, show, order); } else { sb.AppendFormat("select COUNT(0) from {0} where {4};select top {1} {2} from {0} where {4} order by {3}", tab, pageSize, show, order, where); } } else { int start = pageIndex * pageSize; int end = start - pageSize + 1; string pagestr = start == end ? string.Format("={0}", start) : string.Format(" between {0} and {1}", end, start); if (mulit) { int kgIndex = show.IndexOf(' '); if (string.IsNullOrEmpty(where)) { sb.AppendFormat("select COUNT(0) from {0};select top {5} {1} from (select ROW_NUMBER() over(order by {2}) rowid,{4} from {0}) tb0 where rowid{3}", tab, show.Substring(kgIndex), order, pagestr, show, pageSize); } else { sb.AppendFormat("select COUNT(0) from {0} where {1};select top {6} {2} from (select ROW_NUMBER() over(order by {3}) rowid,{5} from {0} where {1}) tb0 where rowid{4}", tab, where, show.Substring(kgIndex), order, pagestr, show, pageSize); } } else { if (string.IsNullOrEmpty(where)) { sb.AppendFormat("select COUNT(0) from {0};select top {4} {1} from (select ROW_NUMBER() over(order by {2}) rowid,{1} from {0}) tb0 where rowid{3}", tab, show, order, pagestr, pageSize); } else { sb.AppendFormat("select COUNT(0) from {0} where {1};select top {5} {2} from (select ROW_NUMBER() over(order by {3}) rowid,{2} from {0} where {1}) tb0 where rowid{4}", tab, where, show, order, pagestr, pageSize); } } } return DbHelperSQL.Query(sb.ToString()); }
转载于:https://www.cnblogs.com/daixingqing/archive/2012/11/13/2768433.html
