asp.net 分页sql语句(结合aspnetpager)

yizhihongxing

借助ASP.NET和ASPNetPager,我们可以使用SQL语句对数据库进行分页。下面将提供ASP.NET分页SQL句法,同时结合ASPNetPager进行解释和说明。

分页SQL语句

分页SQL语句的结构如下:

SELECT * FROM
(
  SELECT ROW_NUMBER() OVER (ORDER BY {sort_expression}) 
  AS rownum, {column_list} 
  FROM {table_name}
) AS derivedtbl WHERE rownum BETWEEN {start_row} AND {end_row}

上面的语句结构中,参数说明如下:

  • sort_expression:按此表达式排序。必填参数。
  • column_list:要返回的列列表。必填参数。
  • table_name:要分页的数据库表名。必填参数。
  • start_row:分页结果的起始行。必填参数。
  • end_row:分页结果的结束行。必填参数。

由于此语句使用了ROW_NUMBER函数,因此,sqlserver 的版本需为2005及以上。

使用ASPNetPager进行分页

将上述的SQL语句集成到ASPNetPager中,通过适当的参数调整实现分页。ASPNetPager具有属性和方法,可用于在应用程序中对SQL数据源进行分页。

以下是使用ASPNetPager进行分页的示例:

string sql = "SELECT * FROM " + tableName;
sql += " ORDER BY " + sortExpression;

DataSet dsTotal = SqlHelper.ExecuteDataset(conn, CommandType.Text, sql);
PagingRecordCount = dsTotal.Tables[0].Rows.Count;

PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.PageSize = DefaultPageSize;
pds.DataSource = dsTotal.Tables[0].DefaultView;
pds.CurrentPageIndex = CurrentPageIndex - 1;

this.rptList.DataSource = pds;
this.rptList.DataBind();

上述代码中,关键步骤如下:

  • 使用SQL语句获取完整的数据列表。
  • 获取该数据集的总记录数,以在分页期间正确计算可用页数。
  • 将结果绑定到ASPNetPager控件(rptList)。

在上述示例中,我们可以使用SqlHelper.ExecuteDataset方法访问数据库,DataSet可以返回查找结果集。

示例一:基于日期的分页查询

以下将描述如何基于查询日期翻页,查询数据某时间区间内的项目列表。

string beginDate = DateTime.Now.AddDays(-30).ToShortDateString();
string endDate = DateTime.Now.ToShortDateString();
string sql = $"SELECT * FROM {TableName} WHERE CreateDate >= '{beginDate}' AND CreateDate <= '{endDate}' ORDER BY ID DESC";
int rownums = SqlHelper.ExecuteScalar("SqlServerConnectionString", CommandType.Text, $"SELECT COUNT(*) FROM ({sql}) AS t");
this.AspNetPager.RecordCount = rownums;

DataSet ds = SqlHelper.ExecuteDataset("SqlServerConnectionString", CommandType.Text, sql);
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.DataSource = ds.Tables[0].DefaultView;
pds.CurrentPageIndex = this.AspNetPager.CurrentPageIndex - 1;
pds.PageSize = this.AspNetPager.PageSize;

this.rptList.DataSource = pds;
this.rptList.DataBind();

我们可以使用ASPNetPager控件实现这种类型的分页需求。并且我们还可以使用WHERE子句过滤器过滤需要翻页的数据,例如上述示例中的日期过滤器,可以实现特定时间范围内数据的分页查询。

示例二:基于条件的分页查询

以下将描述如何在查询时使用滤波器进行筛选,以基于查询条件获得分页查询的结果。此示例使用ASP.NET MVC中的Skip和Take运算符。

public ActionResult Index(int pageIndex = 1)
{
    var query = db.Students.AsQueryable();

    // 筛选器
    if (!string.IsNullOrEmpty(Request["txtName"]))
    {
        query = query.Where(s => s.Name.Contains(Request["txtName"]));
    }

    if (!string.IsNullOrEmpty(Request["txtRoll"]))
    {
        query = query.Where(s => s.Roll.Contains(Request["txtRoll"]));
    }

    int totalRecord = query.Count();
    int pageSize = 10;
    int totalPage = (int)Math.Ceiling((double)totalRecord / (double)pageSize);

    if (pageIndex < 1)
    {
        pageIndex = 1;
    }

    if (pageIndex > totalPage)
    {
        pageIndex = totalPage;
    }

    ViewBag.TotalRecord = totalRecord;
    ViewBag.PageIndex = pageIndex;
    ViewBag.TotalPage = totalPage;
    ViewBag.TxtName = Request["txtName"];
    ViewBag.TxtRoll = Request["txtRoll"];

    IQueryable<Student> students = query.OrderByDescending(s => s.Id).Skip((pageIndex - 1) * pageSize).Take(pageSize);
    return View(students.ToList());
}

在上述示例中,我们首先使用Skip和Take操作符进行筛选预处理,以减少数据库服务器上的网络传输并获得所需的结果集。然后,我们使用Skip和Take操作符从查询结果集中选取所需的页,并将其作为列表传递给视图,以显示网页的详细数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net 分页sql语句(结合aspnetpager) - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • .net中webconfig 详解

    下面是”.net中webconfig 详解”的完整攻略。 一、什么是Web.config Web.config是一个XML格式的文件,它存储着一个Web应用程序中的配置信息,如数据库连接字符串、身份验证方式、Session状态管理等等。 Web.config配置信息可以修改,可以在运行时动态修改,这样就不用重新编译整个应用程序,使得应用程序的管理更加方便。 …

    database 2023年5月21日
    00
  • SQL 填补缺失的日期

    SQL是一种强大的关系型数据库语言,它可以轻松地完成数据的查询、更新、删除、插入等操作。其中一个常见的操作是填补缺失的日期数据,下面是SQL填补缺失日期的完整攻略及两条实例。 一、SQL填补缺失日期的攻略 1. 确定日期范围 首先需要确定数据集的日期范围,以便了解哪些日期缺失。这可以通过查询数据集中最小和最大日期来实现,方法如下: SELECT MIN(da…

    database 2023年3月27日
    00
  • JDBC连接Oracle数据库常见问题及解决方法

    下面我将为您详细讲解“JDBC连接Oracle数据库常见问题及解决方法”的完整攻略。包括以下几个方面: JDBC连接Oracle数据库的基本方法 首先,我们需要下载并安装Oracle JDBC驱动程序,然后在Java代码中引入该驱动程序。在Java中连接Oracle数据库的方式如下: Class.forName("oracle.jdbc.drive…

    database 2023年5月21日
    00
  • linux自动运行rman增量备份脚本

    下面是“Linux自动运行RMAN增量备份脚本”的完整攻略: 1. 编写RMAN增量备份脚本 我们首先需要编写RMAN增量备份脚本,这个脚本的作用是连接到Oracle数据库,执行增量备份操作,并将备份文件保存到指定的位置。以下是一个简单的示例脚本: #!/bin/bash # set RMAN environment variables export ORA…

    database 2023年5月22日
    00
  • 主键和超级键的区别

    主键和超级键都是关系数据库领域中的术语,是用于描述数据库中数据表的两个概念。 主键 什么是主键 主键是一个不可重复的、唯一性的、非空的字段,用来唯一标识一条记录。每个数据表都必须至少拥有一个主键。 主键的特点 唯一性:每个主键值只会在数据表中出现一次 非空:主键值不能为空 不可重复:每个主键值必须唯一 主键的示例 假设有一个数据表格students,其中有以…

    database 2023年3月27日
    00
  • CGI漏洞集锦

    CGI漏洞集锦完整攻略 什么是CGI CGI是Web服务器中最基本的技术之一,它是定义了Web服务器如何处理客户端请求的一种标准。通俗理解,当用户在Web浏览器上输入URL地址并访问Web服务器时,Web服务器会将请求以HTTP请求的形式传递给CGI程序。CGI程序读取请求并进行处理,最后将处理结果返回给Web服务器,Web服务器将结果返回给用户的Web浏览…

    database 2023年5月22日
    00
  • Oracle中触发器示例详解

    创建一个触发器为了创建一个触发器,你需要执行以下步骤: 定义一个触发器,指定触发器何时触发,如何触发和触发后要做什么操作,可以使用CREATE TRIGGER语句来定义触发器,语法如下: CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name …

    database 2023年5月21日
    00
  • django1.11如何实时访问mysql数据库

    前几天,一直在研究django框架,发现它自身封装了很多有用的API,很有意思。比如,数据库操作基本的创表,查询,插值,更新,删除都有,很方便,再加上json库可以直接将数据json化,通过服务器传给前端并显示,连数据库也很快,响应迅速。 django 操作mysql数据库   取数据: 1 from blog.models import SfhdPredi…

    MySQL 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部