精华的微软文章".NET 数据访问架构指南",特别是数据库连接的测试.即监视链接池化 (2)

时间:2007-11-2 15:39:26  来源:编程网  作者:asp.net  责任编辑:aspx
数据绑定

所有这三个对象都可以作为数据绑定控件的数据源。而DataSet 和 DataTable 可作为更广范围控件的数据源。这是因为DataSet 和 DataTable 实现了(生成Ilist接口)IlistSource接口,而SqlDataReader 实现了Ienumerable接口。许多能进行数据绑定的WinForm控件需要实现了Ilist接口的数据源。

这种不同是因为为每种对象类型设计的场景类型不同。DataSet (它包含 DataTable)是一个丰富的、非链接结构,它适合于Web和桌面(WinForm)应用程序。另一方面,数据阅读器已经为Web应用程序进行了优化,这种应用程序需要优化的、只能向前的数据访问。

检查将要绑定到的特定控件类型的数据源需求。

在应用程序层间传递数据

DataSet提供了可作为XML被任意操纵数据的关系图,并允许数据的非链接缓存拷贝在应用程序层与组件间传递。然而,SqlDataReader提供了更优化的性能,因为它避免了与创建DataSet相关的性能及内存开销。记住,DataSet对象的创建将导致多个子对象--包括DataTable, DataRow 和DataColumn--及作为这些子对象容器的集合对象的创建。

使用DataSet

使用SqlDataAdapter填充的DataSet对象,当:

  • 你需要非链接的驻留内存的缓存数据,以便你能将它传递到其它组件或应用程序中的其它层。
  • 你需要内存中的数据关系图以执行XML或非XML操作。
  • 你正在使用的数据来自多个数据源,如多个数据库、表或文件。
  • 你希望更新获得的一些或所有行,并希望利用SqlDataAdapter的批更新功能。
  • 你要对控件绑定数据,而此控件需要支持IList接口的数据源。

更多信息

如果使用SqlDataAdapter生成DataSet 或 DataTable,需注意:

  • 不必明确打开或关闭数据库链接。SqlDataAdapter Fill方法打开数据库链接,并在此方法返回前关闭该链接。如果链接原来已经打开,那么此方法仍使链接处于打开状态。
  • 如果出于其它目的需要链接,那么考虑在调用Fill方法前打开链接。这样你就可以避免不必要的打开/关闭操作,提高性能。
  • 尽管能重复使用同一SqlCommand对象多执行同样的命令,但不要重复使用此对象执行不同的命令。
  • 关于如何利用SqlDataAdapter对象填充DataSet 或 DataTable对象的代码示例,见附录中的如何利用SqlDataAdapter 对象获得多行

使用SqlDataReader

些劣情况,可以使用通过调用 SqlCommand 对象的ExecuteReader方法得到的SqlDataReader对象:

  • 正在处理大量数据时--太多了而不能在单个缓冲区内维护。
  • 希望减少应用程序在内存中的印迹。
  • 希望避免与DataSet对象创建相关的开销。
  • 希望对某控件执行数据绑定操作,而此控件支持实现了IEnumerable接口的数据源。
  • 希望流水线化数据访问,并对其优化。
  • 正在读取包含二进制大对象(BLOB)列的行。你可以使用SqlDataReader对象以可管理的大块为单位从数据库中将BLOB数据拉出来,而不是一次性地将所有数据提取出来。关于处理BLOB数据的更多细节,见本文处理BLOBs 一节。

添加到各大书签: