日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

DataGrid连接Access的快速分页法——动态生成SQL语句

發(fā)布時(shí)間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataGrid连接Access的快速分页法——动态生成SQL语句 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
作者:黎波

using System; using System.Text; namespace Paging { /// <summary> /// FastPaging 的摘要說(shuō)明。 /// </summary> public class FastPaging { private FastPaging() { } /// <summary> /// 獲取根據(jù)指定字段排序并分頁(yè)查詢的 SELECT 語(yǔ)句。 /// </summary> /// <param name="pageSize">每頁(yè)要顯示的記錄的數(shù)目。</param> /// <param name="pageIndex">要顯示的頁(yè)的索引。</param> /// <param name="recordCount">數(shù)據(jù)表中的記錄總數(shù)。</param> /// <param name="tableName">要查詢的數(shù)據(jù)表。</param> /// <param name="queryFields">要查詢的字段。</param> /// <param name="primaryKey">主鍵字段。</param> /// <param name="ascending">是否為升序排列。</param> /// <param name="condition">查詢的篩選條件。</param> /// <returns>返回排序并分頁(yè)查詢的 SELECT 語(yǔ)句。</returns> public static String Paging( int pageSize, int pageIndex, int recordCount, String tableName, String queryFields, String primaryKey, bool ascending, String condition ) { #region 實(shí)現(xiàn) StringBuilder sb??? = new StringBuilder(); int pageCount?????? = GetPageCount(recordCount,pageSize);?? //分頁(yè)的總數(shù) int middleIndex???? = GetMidPageIndex(pageCount);?????????? //中間頁(yè)的索引 int firstIndex????? = 0;??????????????????????????????????? //第一頁(yè)的索引 int lastIndex?????? = pageCount - 1;??????????????????????? //最后一頁(yè)的索引 #region @PageIndex <= @FirstIndex if (pageIndex <= firstIndex) { sb.Append("SELECT TOP ").Append(pageSize).Append(" ").Append(queryFields) .Append(" FROM ").Append(tableName); if (condition != String.Empty) sb.Append(" WHERE ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(ascending)); } #endregion #region @FirstIndex < @PageIndex <= @MiddleIndex else if (pageIndex > firstIndex && pageIndex <= middleIndex) { sb.Append("SELECT TOP ").Append(pageSize).Append(" ").Append(queryFields) .Append(" FROM ").Append(tableName) .Append(" WHERE ").Append(primaryKey); if (ascending) sb.Append(" > (").Append(" SELECT MAX("); else sb.Append(" < (").Append(" SELECT MIN("); sb.Append(primaryKey).Append(") FROM ( SELECT TOP ") .Append(pageSize*pageIndex).Append(" ").Append(primaryKey) .Append(" FROM ").Append(tableName); if (condition != String.Empty) sb.Append(" WHERE ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(ascending)) .Append(" ) TableA )"); if (condition != String.Empty) sb.Append(" AND ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(ascending)); } #endregion #region @MiddleIndex < @PageIndex < @LastIndex else if (pageIndex > middleIndex && pageIndex < lastIndex) { sb.Append("SELECT * FROM ( SELECT TOP ") .Append(pageSize).Append(" ").Append(queryFields) .Append(" FROM ").Append(tableName) .Append(" WHERE ").Append(primaryKey); if (ascending) sb.Append(" < (").Append(" SELECT MIN("); else sb.Append(" > (").Append(" SELECT MAX("); sb.Append(primaryKey).Append(") FROM ( SELECT TOP ") .Append(recordCount-pageSize*(pageIndex+1)).Append(" ").Append(primaryKey) .Append(" FROM ").Append(tableName); if (condition != String.Empty) sb.Append(" WHERE ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(!ascending)) .Append(" ) TableA )"); if (condition != String.Empty) sb.Append(" AND ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(!ascending)) .Append(" ) TableB ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(ascending)); } #endregion #region @PageIndex >= @LastIndex else if (pageIndex >= lastIndex) { sb.Append("SELECT * FROM ( SELECT TOP ").Append(recordCount-pageSize*lastIndex) .Append(" ").Append(queryFields) .Append(" FROM ").Append(tableName); if (condition != String.Empty) sb.Append(" WHERE ").Append(condition); sb.Append(" ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(!ascending)) .Append(" ) TableA ORDER BY ").Append(primaryKey).Append(" ") .Append(GetSortType(ascending)); } #endregion return sb.ToString(); #endregion } /// <summary> /// 獲取根據(jù)指定字段排序并分頁(yè)查詢的 SELECT 語(yǔ)句。 /// </summary> /// <param name="pageSize">每頁(yè)要顯示的記錄的數(shù)目。</param> /// <param name="pageIndex">要顯示的頁(yè)的索引。</param> /// <param name="recordCount">數(shù)據(jù)表中的記錄總數(shù)。</param> /// <param name="tableName">要查詢的數(shù)據(jù)表。</param> /// <param name="queryFields">要查詢的字段。</param> /// <param name="primaryKey">主鍵字段。</param> public static String Paging( int pageSize, int pageIndex, int recordCount, String tableName, String queryFields, String primaryKey ) { return Paging(pageSize, pageIndex, recordCount, tableName, queryFields, primaryKey, true, String.Empty); } /// <summary> /// 獲取根據(jù)指定字段排序并分頁(yè)查詢的 SELECT 語(yǔ)句。 /// </summary> /// <param name="pageSize">每頁(yè)要顯示的記錄的數(shù)目。</param> /// <param name="pageIndex">要顯示的頁(yè)的索引。</param> /// <param name="recordCount">數(shù)據(jù)表中的記錄總數(shù)。</param> /// <param name="tableName">要查詢的數(shù)據(jù)表。</param> /// <param name="queryFields">要查詢的字段。</param> /// <param name="primaryKey">主鍵字段。</param> /// <param name="ascending">是否為升序排列。</param> /// <returns>返回排序并分頁(yè)查詢的 SELECT 語(yǔ)句。</returns> public static String Paging( int pageSize, int pageIndex, int recordCount, String tableName, String queryFields, String primaryKey, bool ascending ) { return Paging(pageSize, pageIndex, recordCount, tableName, queryFields, primaryKey, ascending, String.Empty); } /// <summary> /// 獲取根據(jù)指定字段排序并分頁(yè)查詢的 SELECT 語(yǔ)句。 /// </summary> /// <param name="pageSize">每頁(yè)要顯示的記錄的數(shù)目。</param> /// <param name="pageIndex">要顯示的頁(yè)的索引。</param> /// <param name="recordCount">數(shù)據(jù)表中的記錄總數(shù)。</param> /// <param name="tableName">要查詢的數(shù)據(jù)表。</param> /// <param name="queryFields">要查詢的字段。</param> /// <param name="primaryKey">主鍵字段。</param> /// <param name="condition">查詢的篩選條件。</param> /// <returns>返回排序并分頁(yè)查詢的 SELECT 語(yǔ)句。</returns> public static String Paging( int pageSize, int pageIndex, int recordCount, String tableName, String queryFields, String primaryKey, String condition ) { return Paging(pageSize, pageIndex, recordCount, tableName, queryFields, primaryKey, true, condition); } /// <summary> /// 計(jì)算分頁(yè)數(shù)。 /// </summary> /// <param name="recordCount">表中得記錄總數(shù)。</param> /// <param name="pageSize">每頁(yè)顯示的記錄數(shù)。</param> /// <returns>分頁(yè)數(shù)。</returns> public static int GetPageCount(int recordCount, int pageSize) { return (int)Math.Ceiling((double)recordCount/pageSize); } /// <summary> /// 計(jì)算中間頁(yè)的頁(yè)索引。 /// </summary> /// <param name="pageCount">分頁(yè)數(shù)。</param> /// <returns>中間頁(yè)的頁(yè)索引。</returns> public static int GetMidPageIndex(int pageCount) { return (int)Math.Ceiling((double)pageCount/2) - 1; } /// <summary> /// 獲取排序的方式("ASC" 表示升序,"DESC" 表示降序)。 /// </summary> /// <param name="ascending">是否為升序。</param> /// <returns>排序的方式("ASC" 表示升序,"DESC" 表示降序)。</returns> public static String GetSortType(bool ascending) { return (ascending ? "ASC" : "DESC"); } /// <summary> /// 獲取一個(gè)布爾值,該值指示排序的方式是否為升序。 /// </summary> /// <param name="orderType">排序的方式("ASC" 表示升序,"DESC" 表示降序)。</param> /// <returns>"ASC"則為 true;"DESC"則為 false;其它的為 true。</returns> public static bool IsAscending(String orderType) { return ((orderType.ToUpper() == "DESC") ? false : true); } } } ?

總結(jié)

以上是生活随笔為你收集整理的DataGrid连接Access的快速分页法——动态生成SQL语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。