我有以下代码对数据库执行自定义查询。 查询定义存储在表中,但用户不会输入分页。
因为它可以返回10,000行或更多行,所以我需要通过修改查询来进行分页。
QuerySql =“select * from requestbases where currentstatus =='Approved 1'和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();
答案 0 :(得分: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
因此,假设您可以编写一些代码,这些代码会在select语句的正确位置插入RowNumber位,并且您还在使用MSSQL 2005.如果还没有,可能还需要调整IdentityCol位得到了身份栏。
因此,StartIndex是最后显示的数据项,20是您在页面上需要的项目数。项目总数是RowNum和InverseRowNum -1的总和。