如何使用start和limit进行分页

本文关键字:分页 limit 何使用 start | 更新日期: 2023-09-27 17:50:05

我正在尝试使用网格分页。下面的方法将表中的所有内容都提供给网格。我如何考虑开始和限制,其中开始是页码,限制是每页的记录。基本上extjs工具栏寻找我的方法返回开始和限制的需求。我已经尝试了很多解决方案,但似乎都不起作用。这就是为什么我在这里用一种简单的方式来表达。

这是我的c#结束

public string myRecord(int start, int limit)
{
    List<gridPaging> result = new List<gridPaging>();
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices2"].ConnectionString))
    {
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandText = "SELECT * FROM myTable ORDER BY Q1";
        con.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            gridPaging gp = new gridPaging();
            gp.Column1 = reader["Column1"].ToString().Trim();
            gp.Column2 = reader["Column2"].ToString().Trim();
            gp.Column3 = reader["Column3"].ToString().Trim();
            gp.Column4 = reader["Column4"].ToString().Trim();
            result.Add(gp);
        }
        return JsonConvert.SerializeObject(result);
    }
}

如何使用start和limit进行分页

如果这与您当前的实现类似,您可以修改SQL以利用ROW_NUMBER: T-SQL: Paging with ROW_NUMBER()

或者,如果您有某种LINQ实现,您可以使用.Skip().Take()方法来执行分页。

在T-SQL中,有两个内置的插件可以帮助您;第一个是Row_Number函数,它按照一个特殊的ORDER by子句的顺序为结果集的每一行分配一个唯一的递增序数,第二个是TOP关键字,它限制了要返回的最大行数。

基本上,你的查询应该是这样的:
SELECT TOP @limit * FROM myTable WHERE (ROW_NUMBER() OVER (ORDER BY Q1)) > @limit * @start ORDER BY Q1

然后使用Command.CreateParameter从c#代码中插入参数@start和@limit的值。例如,对于第三页结果(使用0索引的start值2),每页有15个结果,其计算结果为语句

SELECT TOP 15 * FROM myTable WHERE (ROW_NUMBER() OVER (ORDER BY Q1)) > 30 ORDER BY Q1

…它提供了从31到45的整个查询中的行,前两个页面的查询分别产生了1-15和16-30行。