我正确地使用我自己的方式来实现这个,但我不知道它是否有效,所以这是功能:
public SqlDataReader GetArticlesByPage(int pageNum, int pageSize)
{
if (pageNum == 0)
pageNum = 1;
SqlDataReader dr = SqlHelper.ExecuteReader(string.Format("SELECT TOP {0} Des, Id, Title, Icon FROM Threads ORDER BY Id DESC", pageSize * pageNum));
int div = pageNum - 1;
div = pageSize * div;
for (int i = 0; i < div; i++)
dr.Read();
return dr;
}
它工作正常,但正如您看到的代码,当我需要获取第 10 页的文章时,页面大小例如每页 10 个,我选择前 10*10 个结果,然后使用 FOR 语句跳过不需要的结果。
任何建议,提前致谢。
最佳答案
你可以在sql server上做所有的分页。
例如,参见
http://blogs.x2line.com/al/archive/2005/11/18/1323.aspx
如果您不想这样做并坚持使用 TOP
,那么在开始时跳过这些行几乎是您所能做的,没关系。
(来自上面的链接)
DECLARE @PageNum AS INT;
DECLARE @PageSize AS INT;
SET @PageNum = 2;
SET @PageSize = 10;
WITH OrdersRN AS
(
SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
,OrderID
,OrderDate
,CustomerID
,EmployeeID
FROM dbo.Orders
)
SELECT *
FROM OrdersRN
WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1
AND @PageNum * @PageSize
ORDER BY OrderDate
,OrderID;
关于c# - 在 SqlDataReader 中实现分页的正确方法!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703889/