0

データベースに対してカスタム クエリを実行する次のコードがあります。クエリ定義はテーブルに保存されますが、ユーザーはページネーションを入力しません。

10,000 行以上を返す可能性があるため、クエリを変更してページ分割する必要があります。

QuerySql= "select * from requestbases where 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 ビットを挿入するコードを記述できること、および MSSQL 2005 を使用していることを前提としています。ID 列がない場合は、IdentityCol ビットも調整する必要がある場合があります。 .

したがって、StartIndex は最後に表示されたデータ項目であり、20 はページに必要な項目の量です。項目の合計数は、RowNum と InverseRowNum -1 の合計です。

于 2012-06-05T14:18:30.547 に答える