序应用到 DataView 时,就会建立一个搜索时使用的索引。DataView 公开 Find 和
FindRows 方法,以便查询基础 DataTable 中的数据。
•
如果不需要表的排序视图,仍可以通过为 DataTable 创建 DataView 来利用基于索引的
查找。注意,只有对数据执行多个查询操作时,这样才会带来好处。如果只执行单一查询,创
建索引所需要的处理就会降低使用索引所带来的性能提升。
DataView 构造
如果创建了 DataView,并且修改了 Sort、RowFilter 或 RowStateFilter 属性,
DataView 就会为基础 DataTable 中的数据建立索引。创建 DataView 对象时,要使用
DataView 构造函数,它用 Sort、RowFilter 和 RowStateFilter 值作为构造函数参数
(与基础 DataTable 一起)。结果是创建了一次索引。创建一个“空”DataView 并随后设
置 Sort、RowFilter 或 RowStateFilter 属性,会导致索引至少创建两次。
分页
ADO.NET 可以显式控制从数据源中返回什么样的数据,以及在 DataSet 中本地缓存多少数
据。对查询结果的分页没有唯一的答案,但下面有一些设计应用程序时应该考虑的技巧。
•
避免使用带有 startRecord 和 maxRecords 值的 DataAdapter.Fill 重载。当以这种
方式填充 DataSet 时,只有 maxRecords 参数(从 startRecord 参数标识的记录开
始)指定的记录数量用于填充 DataSet,但无论如何总是返回完整的查询。这就会引起不必
要的处理,用于读取“不需要的”记录;而且为了返回附加记录,会耗尽不必要的服务器资源。
•
用于每次只返回一页记录的技术是创建 SQL 语句,把 WHERE 子句以及 ORDER BY 子句和
TOP 谓词组合起来。此技术取决于存在一种可唯一标识每一行的办法。当浏览下一页记录
时,修改 WHERE 子句使之包含所有唯一标识符大于当前页最后一个唯一标识符的记录。当
浏览上一页记录时,修改 WHERE 子句使之返回所有唯一标识符小于当前页第一个唯一标识
符的记录。两种查询都只返回记录的 TOP 页 。当浏览上一页时,需要以降序为结果排序。这
将有效地返回查询的最后一页(如果需要,显示之前也许要重新排序结果)。有关这个技术的
一个示例,请参阅 Paging Through a Query Result。
•
另一项每次只返回一页记录的技术是创建 SQL 语句,把 TOP 谓词和嵌入式 SELECT 语句的
使用结合在一起。此技术并不依赖于存在一种可唯一标识每一行的办法。使用这项技术的第一