上一篇:DataGrid基于Access的快速分页法(2) >>
DataGrid基于Access的快速分页法(3)
降序的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);
}
下一篇:DataGrid基于Access的快速分页法(4) >>
相关文章:
- · ASP.NET入门随想之工业流水线
- · ASP.NET入门随想之抽象的力量
- · ASP.NET入门随想之瘦子与胖子的故事
- · ASP.NET入门随想之开卷有益
- · ASP.NET中随机数生成及应用(2)
- · ASP.NET中随机数生成及应用(1)
- · ASP.NET中实现Flash与.NET的紧密集成(1)
- · ASP.NET中实现Flash与.NET的紧密集成(2)
- · 深度解析ASP.NET2.0中的Callback机制(1)
- · ASP.NET+AJAX解决网页打开等待问题(1)
- · ASP.NET+AJAX解决网页打开等待问题(2)
- · C#中为DataGrid添加下拉列表框
- · ASP.NET开发员工业绩评测中心(1)
- · ASP.NET开发员工业绩评测中心(2)
- · 在ASP应用程序中限制重复提交同一表单
- · 用VB将ASP代码封装成DLL
- · 如何在IIS上搭建WAP网站
- · asp程序错误详细说明例表
- · 短信发送程序
- · 用ASP实现电子贺卡
- · ASP.NET创建并使用Web组件(1)
- · asp.net生成缩略图
- · 动态增加的DropDownList如何保持状态
- · ASP.NET创建并使用Web组件(2)
- · ASP.NET创建并使用Web组件(3)
- · 在ASP.NET中显示进度条
- · ASP.NET Whidbey中实现Provider(1)
- · ASP.NET Whidbey中实现Provider(2)
- · DataGrid控件使用技巧(1)
- · ASP.NET页面间数据传递小结(1)
- · ASP.NET页面间数据传递小结(2)
- · ASP.NET页面间数据传递小结(3)
- · 用ASP.NET创建自定义文本框(1)
- · 了解ASP.NET页面对象模型(1)
- · 了解ASP.NET页面对象模型(2)
- · XmlTextWriter创建XML文件(2)
- · 为ASP.NET控件添加设计时支持(1)
- · 为ASP.NET控件添加设计时支持(2)
