Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c语言中分页和查询大数据#_C#_Sql Server 2005_Ado.net - Fatal编程技术网

C# 如何在c语言中分页和查询大数据#

C# 如何在c语言中分页和查询大数据#,c#,sql-server-2005,ado.net,C#,Sql Server 2005,Ado.net,我需要通过C#和ADO.NET(IDbDataReader和IDbCommandAPI)从数据库中查询大量数据。 我创建了如下查询: WITH v as (SELECT myFields, Datefield ROW_NUMBER() OVER (ORDER BY Datefield ASC) AS CurrentRow FROM dbTable WHERE /**/ AND Datefield BETWEEN @pStart AND @pEnd // ... ) S

我需要通过C#和ADO.NET(
IDbDataReader
IDbCommand
API)从数据库中查询大量数据。 我创建了如下查询:

WITH v as 

(SELECT myFields, Datefield 

ROW_NUMBER() OVER (ORDER BY Datefield ASC) AS CurrentRow 

FROM dbTable 

WHERE /**/ 

AND Datefield BETWEEN @pStart AND @pEnd 

// ... )


SELECT myFields, Datefield from v where CurrentRow 
BETWEEN @pRowStart AND @pRowEnd
从结果来看,我必须使用C#API来转换和生成新数据, 这就是为什么不能使用纯SqlServer解决方案的原因

我想查询页面大小为10000的数据库,直到没有更多数据为止。 差不多

while (true)
{
  // ... execute reader
  if (reader.HasRows) 
     break;
}
无法工作,因为我必须使用IDbDataReader接口

在我的情况下我能做什么

编辑+解决方案
我在while循环中迭代每个块并检查datareader的
HasRows
属性,因为我可以使用专用类型。

在SQL Server 2012上,您可以使用OFFSET和FETCH子句进行简单高效的分页,如Y子句示例所示:

SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC 
    OFFSET @StartingRowNumber - 1 ROWS 
    FETCH NEXT @RowCountPerPage ROWS ONLY;
在以前的版本中,您可以使用CTE和计算每行的数字并限制结果:

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;

SQL Server 2012在ORDER BY子句中添加了OFFSET和NEXT子句以简化分页。请告诉我们您将运行哪个版本的SQL Server,并将此标记为答案,因为现在我知道如何在2012版本中执行此操作。