数据访问策略建议.DataSet&DataReader.(摘自msdn.写的很好!放在blog中了!)

ADO.NET 假定一个用于数据访问的模型:您在其中打开一个连接,获取数据或执行操作,然后关闭该连接。ADO.NET 为使用此模型提供两个基本的策略。一个模型是在数据集中存储数据,这是断开与数据源的连接时您可以使用的记录的内存中缓存。若要使用一个数据集,您可以创建该数据集的实例,然后使用数据适配器从数据源填充它。然后您可以使用数据集内的数据,例如,通过将控件绑定到数据集成员。有关更多信息,请参见数据集介绍

另一个策略是直接对数据库执行操作。在此模型中,可使用包含 SQL 语句或对存储过程的引用的数据命令对象。然后可以打开一个连接,执行命令以执行操作,接着关闭连接。如果该命令返回结果集(即如果该命令执行 Select 语句),则可以使用数据读取器获取数据,数据读取器的功能类似于高效的只读游标。数据读取器然后作为数据绑定的来源。有关更多信息,请参见 Visual Studio 中的 DataCommand 对象介绍

每一策略都具有特定的优点,这将在下面各节中进行详细介绍。您应基于您的数据访问要求选择策略。

注意   当部署包含 Visual Studio 数据访问组件的应用程序时,必须确保安装该应用程序的用户具有 Microsoft 数据访问组件 (MDAC) 的 2.7 版或更高版本。有关更多信息,请参见<?XML:NAMESPACE PREFIX = MSHelp NS = "http://msdn.microsoft.com/mshelp" />添加 Microsoft 数据访问组件的启动条件。

将数据存储在数据集内

Visual Studio .NET 应用程序中数据访问的常见模型是在数据集中存储数据并使用数据适配器读取和写入数据库中的数据。(.NET 应用程序使用“.NET Framework”:公共语言运行库和托管类。)数据集模型的优越性有:

  • 使用多个表   一个数据集可以包含多个结果表,它将这些表作为离散对象维护。您可以单独使用这些表或作为父子表在它们之间导航。
  • 操作来自多个源的数据   数据集内的表可表示来自多个不同源的数据,例如来自不同数据库、XML 文件、电子表格等的数据,都可出现在同一个数据集中。数据在数据集内以后,您可以操作数据并以同种格式关联数据,就好像它们来自单个源。
  • 在分布式应用程序中的层间移动数据   通过在数据集内保存数据,您可以方便地将它在应用程序的表示层、业务层和数据层之间移动。
  • 与其他应用程序进行数据交换   数据集提供一种功能强大的数据交换方式,它可以与您的应用程序的其他组件以及其他应用程序交换数据。数据集包含对许多功能的广泛支持,如将数据序列化为 XML 和读写 XML 架构。
  • 数据绑定   如果正在使用窗体,将控件绑定到数据集内的数据通常比执行命令后以编程方式将数据值加载到控件方便。
  • 维护记录以供重复使用   通过数据集,您无需再次查询数据库即可重复使用相同的记录。使用数据集功能,您可以对记录进行筛选和排序,并且可以将数据集用作数据源(如果您正在分页)。
  • 便于编程   当使用数据集时,可以生成一个将其结构表示为对象的类文件(例如,数据集内的 Customers 表可以作为 dataset.Customers 对象访问)。这使得用它编程更容易、更清楚也更不易出错,并且受到智能感知、“数据适配器配置向导”等 Visual Studio 工具的支持。

直接执行数据库操作

您还可以直接与数据库交互。在此模型中,可使用包含 SQL 语句或对存储过程的引用的数据命令对象。然后您可以执行命令以执行该操作。如果该命令返回结果集(即如果该命令执行 Select 语句),则可以使用数据读取器获取数据,数据读取器的功能类似于高效的只读游标。

安全说明   当使用 CommandType 属性设置为 Text 的数据命令时,请对从客户端发送过来的信息进行仔细检查,然后再将它传递给数据库。恶意用户可能会试图发送(插入)修改过的或其他 SQL 语句,以获得未经授权的访问或破坏数据库。在将用户输入内容传输到数据库之前,应始终确认这些信息是有效的。如果可能的话,请始终使用参数化查询或存储过程,这是最佳措施。

直接执行数据库操作具有特定的优点,这些优点包括:

  • 额外功能   如前所述,有一些操作只能通过执行数据命令完成,如执行 DDL 命令。
  • 对执行的更多的控制   通过使用命令和数据读取器(如果您正读取数据),您可以对如何和何时执行 SQL 语句或存储过程以及哪些将成为结果或返回值进行更多的控制。
  • 更少的系统开销   通过直接在数据库中读写,您可以不必在数据集内存储数据。由于数据集需要内存,因此可以减少应用程序中的一些系统开销。当您打算只使用数据一次(如在 Web 页中显示搜索结果)时尤其如此。在这种情况下,显示数据时可能不需要创建和填充数据集这一步。
  • 某些情况下编程更少   在少数情况下(尤其是 Web 应用程序),保存数据集状态需要额外编程。例如,在“Web 窗体”页中,每个往返过程都重新创建页面;除非添加编程来保存和还原数据集,否则每个往返过程也都会放弃并重新创建数据集。如果您使用数据读取器直接从数据库读取,则可以避免管理数据集所需的额外步骤。

由于 Web 应用程序的无状态特性以及与存储数据集关联的相应问题,有时在 Web 应用程序中直接对数据库进行操作更实用。有关更多信息,请参见对 Web 窗体页中数据访问的介绍

访问数据建议

下面各节将提供一些建议,这些建议适用于与特定类型应用程序一起使用的数据访问策略。

Web 窗体

通常是使用数据命令;若要获取数据,则使用数据读取器。因为每次 Web 窗体页进行往返过程时都重新创建该页及其控件和组件,所以每次都创建并填充数据集通常是效率低下的,除非您还想要在往返过程间将数据集放入缓存。

在以下情况下使用数据集:

  • 您想要使用多个单独的表或来自不同数据源的表。
  • 您正与其他应用程序或诸如 XML Web services 之类的组件交换数据。
  • 您需要通过从数据库获取的每一记录进行全面的处理。如果您使用数据命令和数据读取器,则您一边读取每一记录一边处理它可能导致连接长期保持打开状态,这可能影响您的应用程序的性能和可缩放性。
  • 如果数据处理涉及相互依赖的记录(例如,在相关表中查找信息)。
  • 如果您想要执行 XML 操作,例如数据上的 XSLT 转换。
  • 如果您喜欢数据集所提供的简便的编程方式。

有关更多信息,请参见 Web 数据访问策略建议

XML Web services

XML Web services 是 ASP.NET Web 应用程序,因此使用与 Web 窗体页相同的模型:每次对其进行调用时创建和放弃 XML Web services。这暗示 XML Web services 的数据访问模型大体上与用于 Web 窗体的数据访问模型相同。但是,XML Web services 通常是中间层对象,并且其主要用途通常是与 Web 上的其他应用程序交换数据。

在以下情况下使用数据集:

  • 您的 XML Web services 发送和接收数据;例如,将数据作为方法的返回值发送并将数据作为方法参数接收。这在 XML Web services 中是基本选择;即使出于其他原因您可以考虑使用数据命令,但与其他组件的数据交换几乎始终意味着您应使用数据集。
  • 出于上面列出的适合于 Web 窗体的任何原因。

在以下情况下请使用数据命令(并在适当时使用数据读取器):

  • XML Web services 正检索标量值。
  • XML Web services 正执行非查询操作,例如 DDL 命令。
  • XML Web services 正调用存储过程以在数据库内执行逻辑。

Windows 窗体

一般而言,在 Windows 窗体中使用数据集。Windows 窗体通常用于胖客户端,在其中每一用户操作不创建和放弃窗体(及其数据),这与 Web 窗体相同。Windows 窗体应用程序传统上还提供有益于维护记录缓存(例如逐一在窗体中显示记录)的数据访问方案。

具体而言,在以下情况下请使用数据集:

  • 如果您正重复使用相同的记录,例如允许用户在记录间导航。
  • 如果您正使用 Windows 窗体数据绑定结构,该结构是为使用数据集而专门设计的。
  • 出于在上面的 Web 窗体下列出的其他任何原因。

在以下情况下请使用数据命令(并在适当时使用数据读取器):

  • 如果您正从数据库获取标量值
  • 如果您正执行非查询操作,如 DDL 命令。
  • 如果您正在获取只读数据以显示在窗体中,例如,创建报表。另需注意的是,如果不需要在访问数据后保持数据可用,则使用数据命令。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页