数据访问策略建议

原创 2004年08月04日 18:01:00

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

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

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

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

将数据存储在数据集内

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

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

直接执行数据库操作

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

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

  • 额外功能 如同所说明的,有一些操作只能通过执行数据命令完成,如执行 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 命令。
  • 如果您正要以只读方式在窗体中显示;例如,创建报告。另需注意的是,如果不需要在访问数据后保持数据可用,则使用数据命令。

windows下 IP 访问策略控制 (Windows IP安全策略控制)

起因:        由于一些原因要对公司一台服务器做访问控制,要求只有部分网段可以访问,其他网段无法访问这台服务器。曾经做过Windows下的IP访问控制,不过由于过久忘记如何操作,翻看了其他人的文...
  • tiankongxi
  • tiankongxi
  • 2015年08月19日 11:07
  • 5426

Entity FrameWork初始化数据库的四种策略

1、EF初始化数据库的四中策略 EF可以根据项目中的模型自动创建数据库。下面我们就分类看看Entity Framework数据库初始化四种策略 一、 //每次运行都会创建新的数据库       ...
  • jiangfei009003
  • jiangfei009003
  • 2014年08月27日 11:10
  • 1315

如何阻止某个IP访问我的电脑-用本地安全策略限制某个IP段

方法一:通过windows自带的安全策略限制 打开本地安全设置,点“IP安全策略,在本地机器”——>创建IP安全策略---->下一步---->名称随便写,如输入阻止,然后一直点下一步,出现提示点是,...
  • saga_gallon
  • saga_gallon
  • 2014年06月17日 17:22
  • 2976

Cache映像策略和数据访问流性能分析

  • 2013年05月01日 12:01
  • 539KB
  • 下载

Spring 数据访问策略

Spring封装的数据访问异常  与SQLException是一个Checked Exception不同,Spring定义的基本书籍访问异常DataAccessException是一个Runtime...
  • jazywoo123
  • jazywoo123
  • 2012年09月05日 10:58
  • 473

云计算中数据访问控制方法研究

  • 2014年11月10日 10:51
  • 70KB
  • 下载

地理信息数据访问程序包

  • 2014年10月06日 17:34
  • 18.53MB
  • 下载

SQL数据访问 SQLHelper

  • 2013年07月29日 22:05
  • 25KB
  • 下载

数据访问Remoting

  • 2015年12月22日 21:08
  • 271KB
  • 下载

数据访问Helper

  • 2015年03月16日 14:43
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据访问策略建议
举报原因:
原因补充:

(最多只允许输入30个字)