0

我有以下代码对数据库执行自定义查询。查询定义存储在表中,但用户不会进入分页。

因为它可以返回 10,000 行或更多行,所以我需要通过修改查询来进行分页。

QuerySql=“从请求库中选择 * currentstatus == 'Approved 1' and ammountwithvat>100000”

它返回 10,000 行。

我的代码:

 public DataTable GetGenericResults(string strsql)
            {
                using(var connection = (SqlConnection)_context.Database.Connection)
                {
                    var adapter = new SqlDataAdapter(strsql, connection);
                    var results = new DataSet();
                    adapter.Fill(results, "Results");
                    return results.Tables["Results"];
                }
            }




var datatable = RequestBaseBL.GetGenericResults(query.QuerySql);
                    if (datatable.Rows.Count > 0)
                    {
                        LblCount.Text = datatable.Rows.Count + " records";
                        PanelResults.Visible = true;
                        GrvCustomResults.Visible = true;
                        GrvCustomResults.DataSource = datatable;
                        GrvCustomResults.DataBind();
4

1 回答 1

2

我会在 CTE 中使用查询,就像这样

WITH MyPagedData as (
SELECT *,
ROW_NUMBER() OVER(ORDER BY IdentityCol DESC) as RowNum,
ROW_NUMBER() OVER(ORDER BY IdentityCol ASC) as InverseRowNum
FROM requestbases where currentstatus == 'Approved 1' and ammountwithvat > 100000
)

SELECT * from MyPagedData where RowNum between @StartIndex and @StartIndex + 20  

因此,这假设您能够编写一些代码,将 RowNumber 位插入到 select 语句的正确位置,并且您使用的是 MSSQL 2005。如果您没有标识列,您可能还需要调整 IdentityCol 位.

所以 StartIndex 是最后显示的数据项,20 是您想要在页面上显示的项目数量。项目总数为 RowNum 和 InverseRowNum -1 之和。

于 2012-06-05T14:18:30.547 回答