中国站长下载-为中国站长提供最好最全的建站资源! 首 页发布资源有事留言繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:中国站长下载 -> 文章中心 -> 网页编程 -> .NET编程 -> 文章内容  虚拟主机 域名注册 退出登录 用户管理
栏目导航
· ASP编程 · .NET编程
· PHP编程 · JSP编程
· CGI 专区
热门文章
· sndvol32 - sndvol3...
· [组图] FLASH:《大话李白》...
· 个人网站到底能赚多...
· [图文] Rundll.exe是病毒吗...
· [组图] Flash:制作MV
· 价值12万元的网站SE...
· 网站创业者,你需要...
· 一个成功的网站设计...
· [图文] FLASH:韩国导航条解...
· 中国网站的赚钱模式...
相关文章
· 不用SQL语句查询Dat...
· 用 WebClient.Uploa...
· DataGrid鼠标事件处...
· 关于DataRow和DataC...
· 控制DataGrid中Text...
· DataTable,DataView...
· XML、DataSet、Data...
· XML、DataSet、Data...
· 深入分析ADO.NET中的...
· [图文] 在DataGrid中,使鼠...
DataGrid基于Access的快速分页法(3)
作者:不详  来源:不详  发布时间:2006-8-14 9:30:23  发布人:chinazhan

 减小字体 增大字体

     降序的SQL语句
  
    降序的SQL语句跟升序的大同小异,这里就不在罗嗦了J
  
    (1)@PageIndex <= @FirstIndex
  
  SELECT TOP @PageSize @QueryFields FROM @TableName WHERE @Condition ORDER BY @PrimaryKey DESC
  
    (2)@FirstIndex < @PageIndex <= @MiddleIndex
  
  SELECT TOP @PageSize @QueryFields
  
  FROM @TableName
  
  WHERE @PrimaryKey < (
  
  SELECT MIN(@PrimaryKey) FROM (
  
  SELECT TOP @PageSize*@PageIndex @PrimaryKey
  
  FROM @TableName
  
  WHERE @Condition
  
  ORDER BY @PrimaryKey DESC
  
  ) TableA
  
  ) WHERE @Condition
  
  ORDER BY @PrimaryKey DESC
  
    (3)@MiddleIndex < @PageIndex < @LastIndex
  
  SELECT * FROM (
  
  SELECT TOP @PageSize @QueryFields
  
  FROM @TableName
  
  WHERE @PrimaryKey > (
  
  SELECT MAX(@PrimaryKey) FROM (
  
  SELECT TOP (@RecordCount-@PageSize*(@PageIndex+1)) @PrimaryKey
  
  FROM @TableName
  
  WHERE @Condition
  
  ORDER BY @PrimaryKey ASC
  
  ) TableA
  
  ) WHERE @Condition
  
  ORDER BY @PrimaryKey ASC
  
  ) TableB ORDER BY @PrimaryKey DESC
  
    (4)@PageIndex >= @LastIndex
  
  SELECT * FROM ( SELECT TOP (@RecordCount-@PageSize*@LastIndex) @QueryFields
   FROM @TableName WHERE @Condition ORDER BY @PrimaryKey ASC
  ) TableA ORDER BY @PrimaryKey DESC
  
    如何动态产生上述的SQL语句?
  
    看了上面的SQL语句之后,相信大家已经基本明白该分页法的原理了。下面,我们将要设计一个动态生成SQL语句的类FastPaging。该类有一个公有静态方法,它根据您给出的条件动态生成SQL语句,作为方法的返回值。
  
  // 产生根据指定字段排序并分页查询的 SELECT 语句。
  
  public static String Paging(
  
  int pageSize, //每页要显示的记录的数目。
  
  int pageIndex, //要显示的页的索引。
  
  int recordCount, //数据表中的记录总数。
  
  String tableName, //要查询的数据表。
  
  String queryFields, //要查询的字段。
  
  String primaryKey, //主键字段。
  
  bool ascending, //是否为升序排列。
  
  String condition //查询的筛选条件。
  
  ) {
  
  StringBuilder sb = new StringBuilder();
  
  int pageCount = GetPageCount(recordCount,pageSize); //分页的总数
  
  int middleIndex = GetMidPageIndex(pageCount); //中间页的索引
  
  int firstIndex = 0; //第一页的索引
  
  int lastIndex = pageCount - 1; //最后一页的索引
  
  if (pageIndex <= firstIndex) {
  
  // 代码略
  
  } 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));
  
  }
  
  else if (pageIndex > middleIndex && pageIndex < lastIndex) {
  
  // 代码略
  
  } else if (pageIndex >= lastIndex) {
  
  // 代码略
  
  }
  
  return sb.ToString();
  
  }
  
    除了Paging方法还有另外几个方法:
  
  // 根据记录总数和分页大小计算分页数。
  
  public static int GetPageCount(int recordCount, int pageSize) {
  
  return (int)Math.Ceiling((double)recordCount/pageSize);
  
  }
  
  // 计算中间页的页索引。
  
  public static int GetMidPageIndex(int pageCount) {
  
  return (int)Math.Ceiling((double)pageCount/2) - 1;
  
  }
  
  // 获取排序的方式("ASC"表示升序,"DESC"表示降序)
  
  public static String GetSortType(bool ascending) {
  
  return (ascending ? "ASC" : "DESC");
  
  }
  
  // 获取一个布尔值,该值指示排序的方式是否为升序。
  
  public static bool IsAscending(String orderType) {
  
  return ((orderType.ToUpper() == "DESC") ? false : true);
  
  }
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

 
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
中国站长下载
中国站长下载

本页只接受PR>=4 IT类站点连接,申请连接,谢谢您们的支持!希望我们的下载站能够真正帮到中国的站长们!
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图
Copyright © 2005-2006 ChinaZhan.Net. All Rights Reserved .