SQL Server CE(精简版)中的数据分页

Nei*_*eil 12 data-paging sql-server-ce

我正在编写一个wpf destop应用程序,并希望使用SQL Server CE作为后端.我正在努力想出一个有效的数据分页方法.在SQL Server Express中,我可以这样做:

Select ID, FirstName, LastName
From (SELECT  ROW_NUMBER() OVER (ORDER BY ID)
 AS Row, ID, FirstName, LastName
 From TestTable                             
) 
WHERE  Row > 1 AND Row <= 10    
Run Code Online (Sandbox Code Playgroud)

在SQL Server CE中有什么可比性的吗?我不完全确定什么是和不支持.我想一次只从数据库中返回10行,而不必撤回所有数据,然后将其过滤掉以显示给用户,因为这样会慢得多.谢谢.

小智 8

如果有人到达此页面寻找答案...我发现这篇文章:支持SQL Server CE 4.0中的分页查询

http://beyondrelational.com/blogs/jacob/archive/2010/07/13/support-for-paging-queries-in-sql-server-ce-4-0.aspx

希望这可以帮助


Tia*_*des 5

我目前正在开发一个使用SQL Server CE作为持久性机制的WPF应用程序.我们有几个(40+)表,其中一些非常大(50k记录,至少对我的标准来说很重要).

我对SQL CE中直接进行数据分页的建议如下:如果可以,请避免使用它!我使用过Bob King描述的方法,至少在我看来它导致了非常难看的代码,一个真正的维护噩梦.

除非你需要翻阅数以万计的记录,否则我认为最好的方法是使用SqlCeDataReader将它们全部加载到自定义类的集合中,然后在内存中的页面上进行翻页.我发现这种方法比每次重新执行SQL查询更具响应性,即使使用缓存也是如此.发生的事情是,在我的情况下,查询相当复杂,并且SqlCeDataReader的性能足够好,因此性能损失几乎难以察觉.无需指出,在第一次批量加载后,每个页面的更改几乎都是瞬间发生的,因为所有内容都保存在内存中.

我的用户的一般意见是,可以等待一段时间以显示第一个结果,如果这会导致之后更快的分页.使用LINQ,分页就像调用Skip和Take方法一样简单.我已经在Pager <T>类中实现了这个逻辑,使它非常干燥和漂亮.


Bob*_*ing 2

老实说,最快的方法可能是使用 SqlCeDataReader调用 .Read() 10 次。然后,当用户移动到下一页时,您已经指向第 11 个结果,并且可以阅读另外 10 个结果。如果需要向后返回,可以缓存结果或切换到支持查找的SqlCeResultSet

此外,根据经验,SqlCeDataReader/Result 绝对是与桌面上的数据库交互最快的方式。它实际上比使用 DataSets/DataAdapters 快 100 倍。