C# 如何使用起始和限制进行分页

C# 如何使用起始和限制进行分页,c#,sql-server-2008,paging,extjs4.1,C#,Sql Server 2008,Paging,Extjs4.1,我正在尝试使用网格分页。下面的方法将表中的所有内容都提供给网格。如何说明开始和限制,其中开始是页码,限制是每页的记录。基本上,extjs工具栏寻找我的方法来返回start和limit on demand。我尝试过很多解决方案,但似乎都不管用。这就是为什么我用一种简单的方式把它放在这里 这是我的c端 public string myRecord(int start, int limit) { List<gridPaging> result = new List<gridP

我正在尝试使用网格分页。下面的方法将表中的所有内容都提供给网格。如何说明开始和限制,其中开始是页码,限制是每页的记录。基本上,extjs工具栏寻找我的方法来返回start和limit on demand。我尝试过很多解决方案,但似乎都不管用。这就是为什么我用一种简单的方式把它放在这里

这是我的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);
    }
}

如果这与您当前的实现类似,您可以修改SQL以利用行号:T-SQL:


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

如果这与您当前的实现类似,您可以修改SQL以利用行号:T-SQL:


或者,如果您有某种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的值。例如,对于使用零索引起始值2且每页15个结果的第三页结果,其计算结果为语句

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

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

在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的值。例如,对于使用零索引起始值2且每页15个结果的第三页结果,其计算结果为语句

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

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

您的方法签名是什么样子的?我已经更新了我的问题,你的方法签名是什么样子的{Alex…我已经更新了我的问题谢谢Chris…我在这里尝试你的答案。我对tsql是全新的,所以这对甲烷储存器来说是一个坎坷的过程Chris…我在这里尝试你的答案。我对tsql是全新的,所以对甲烷储存器来说是坎坷的过程Keith…但是正如Kirk提到的…这是查询字符串编辑的@行数部分吗?它不是一个变量,但这是一个函数。谢谢Keith……但正如Kirk提到的……这是查询字符串编辑的@@ROW\u NUMBER部分;它不是一个变量,而是一个函数。