数据访问技术

来源:互联网 发布:比特币 源码用什么语言 编辑:程序博客网 时间:2024/05/17 21:47

MSN链接地址

 

大多数应用程序都需要某种形式的数据访问。如果要创建新的应用程序,有三种极好的数据访问方式可供选择:ADO.NET、ADO 和 OLE DB。如果需要修改现有应用程序的数据访问方式,为了便于维护,可以继续使用该应用程序的当前数据访问技术。但是,如果希望应用程序有较长的生命周期,则应考虑重新设计以对托管应用程序使用 ADO.NET 或对本机应用程序使用 ADO。从长远来看,较新的数据访问技术通常能够减少开发时间,简化代码并提供良好的性能。

ADO.NET

ADO.NET 是重要的应用程序级接口,用于在 Microsoft .NET 平台中提供数据访问服务。在 ADO.NET 中,可以使用新的 .NET Framework 数据提供程序来访问数据源。这些数据提供程序包括:

  • SQL Server .NET Framework 数据提供程序。
  • OLE DB .NET Framework 数据提供程序。
  • ODBC .NET Framework 数据提供程序。
  • Oracle .NET Framework 数据提供程序。

这些数据提供程序可以满足各种开发要求,包括中间层业务对象(它们使用与关系数据库和其他存储区中的数据的活动连接)。

ADO.NET 是专为基于消息的 Web 应用程序而设计的,同时还能为其他应用程序结构提供较好的功能。通过支持对数据的松耦合访问,ADO.NET 减少了与数据库的活动连接数目(即减少了多个用户争用数据库服务器上的有限资源的可能性),从而实现了最大程度的数据共享。

ADO.NET 提供几种数据访问方法。在有些情况下,Web 应用程序或 XML Web services 需要访问多个源中的数据,或者需要与其他应用程序(包括本地和远程应用程序)进行互操作,或者可受益于保持和传输缓存结果,这时使用数据集将是一个明智的选择。作为一种替换方法,ADO.NET 提供数据命令和数据读取器以便与数据源直接通信。使用数据命令和数据读取器直接进行的数据库操作包括:运行查询和存储过程、创建数据库对象、使用 DDL 命令直接更新和删除。

ADO.NET 还通过对分布式 ADO.NET 应用程序的基本对象“数据集”(Dataset) 支持基于 XML 的持久性和传输格式,来实现最大程度的数据共享。数据集是一种关系数据结构,可使用 XML 进行读取、写入或序列化。ADO.NET 数据集使得生成要求应用程序层与多个 Web 站点之间进行松耦合数据交换的应用程序变得很方便。

因为数据集被远程处理为 XML 形式,所以任何两个组件都可共享数据并使用 XML 架构来定义数据集的关系结构。而且,因为数据集的序列化格式是 XML,所以 DataSet 对象可轻松穿过防火墙,而不受任何限制。除了从 XML 加载数据以外,数据集还可用 SQL Server 中的数据以及通过 OLE DB 公开的数据源中的数据来填充,并可保存对这些数据的更改。

数据集的一个主要特性是可用两种方式访问和操作本地数据集内的数据:

  • 作为关系数据库中的表   数据集可以包含一个表或表的集合。数据集的一个重要特征是,它会跟踪其所包含的表之间的关系,就好像它是内存中的关系数据存储区。
  • 作为 XML(可扩展标记语言)结构   数据集中的数据还可按照 XML 数据的形式访问。提供了完成以下操作的方法:以 XML 形式读取和写入数据;以 XML 架构形式读取和写入数据集的结构。此外,为了允许进行同步查看、查询和修改 XML 形式的数据,可将 XmlDataDocument 与数据集相关联。

有关何时使用 ADO.NET 数据访问技术的详细信息,请参见决策图建议和以下各个主题:分布式应用程序和数据集成介绍、Web 数据访问策略建议、ADO.NET 概述、通过 ADO.NET 访问数据、ADO.NET 数据集、直接执行数据库操作、创建和使用数据集。

ADO

对于用本机代码编写的应用程序,ADO 为 OLE DB 数据提供程序提供基于 COM 的应用程序级别接口。与 ADO.NET 相似,ADO 支持各种开发需要,包括使用与关系数据库和其他存储区中的数据的活连接来创建前端数据库客户端和中间层业务对象。而且,像 ADO.NET 一样,ADO 可构建客户端记录集、使用松耦合记录集、处理 OLE DB 的数据整形行集合。

ADO 还支持一些不通过 ADO.NET 公开的行为,如可滚动的服务器端游标。然而,因为服务器端游标需要保存数据库资源,所以使用它们可能会对应用程序的性能和可缩放性产生极大的负面影响。为了通过防火墙传输 ADO 记录集,您需要配置防火墙以启用 COM 封送请求,并考虑相关的安全后果。COM 封送处理还将数据类型限制为 COM 标准定义的那些数据类型。可选择以 XML 格式保持 ADO 记录集并传输 XML 文本。

有关 COM 数据类型的详细信息,请参见 COM 数据类型。有关 ADO 的详细信息,请参见 ADO 的功用和编写 ADO SQL Server 应用程序。

OLE DB

OLE DB 是用于访问数据的重要的系统级编程接口,它是 ADO 的基础技术,同时还是 ADO.NET 的数据源。OLE DB 是用于访问所有类型的数据的开放式标准,这些数据既包括关系数据又包括非关系数据:大型机 ISAM/VSAM 和分层数据库;电子邮件和文件系统存储区;文本、图形和地理数据以及自定义的业务对象。

OLE DB 提供对数据一致的、高性能的访问,并支持各种开发需要,包括使用与关系数据库和其他存储区中数据的活连接来创建前端数据库客户端和中间层业务对象。

有关 OLE DB 的更多信息,请参见 Microsoft OLE DB Web 站点 (http://www.microsoft.com/data/oledb)。

选择 ADO.NET 或 ADO

ADO.NET 和 ADO 都具有以下特点:易于编程;与语言无关;实现过程简单;使用最小网络流量;应用程序前端和数据源之间需要的层数很少。两种方法都可提供高性能的数据访问。

无论您选择这两种数据访问技术中的哪一种,都会影响应用程序的设计、扩展性、互操作性、易于维护性以及其他许多方面。这些方面包括:

  • 托管代码   如果您的应用程序是用托管代码编写的,并且基于公用语言运行库构建,则应使用 ADO.NET。如果是用 C++ 编写非托管代码(尤其是在维护现有的 ADO 应用程序时),ADO 仍是一个不错的选择。
  • 数据结构   ADO.NET 数据集可包含一个或多个表,并同时提供基于表的关系视图和基于 XML 的视图。数据集使用标准的公共语言运行库类型,这可简化编程过程。

    ADO 记录集是单个表,只能以记录集形式访问,并且不包含关系。ADO 记录集可以是多表 JOIN 查询的结果,但它仍只是单个结果表。如果希望 ADO 具有多个表,必须拥有多个 Recordset 对象。由于其集成的关系结构,ADO.NET 数据集可提供更好的功能。

  • 数据共享   ADO.NET 为组件间以及跨层的数据交换提供基础:数据集可以 XML 的形式在 Internet 上传递,并可通过防火墙。可以在您的应用程序内以关系表的形式查看数据集,而在其他一些应用程序中以 XML 数据结构的形式查看同一数据集。数据集提供方便的双向转换:从数据集表到 XML 文档,以及从 XML 文档到数据集表。

    如果使用 COM 封送处理传输 ADO 记录集,目标应用程序必须编写成使用记录集数据结构。与只读取 XML 数据相比较,它所要求的编程难度更大。或者,可以将 ADO 记录集保持为 XML,这样可以更方便地与其他应用程序和服务共享数据。

  • 可缩放性   ADO.NET 是缩放性最强的解决方案。ADO.NET 从一开始就被设计为这样一种数据访问结构,即用来生成具有较低总拥有成本的可缩放 Web 应用程序的最佳数据访问结构。如果您不需要可缩放性并且不用托管代码编写,则可继续使用 ADO。
  • 游标位置   应用程序可以在以下两个位置中的任一处建立结果集:在应用程序进程内(客户端游标)或数据存储区进程内(服务器端游标)。对于任意类型的用户与数据的即兴交互,客户端游标通常是很好的选择。客户端游标在 ADO.NET 中由 DataSet 对象支持,而在 ADO 中则由 ClientCursor Recordset 对象支持。

    顺序的、只读服务器游标在 ADO.NET 中由数据读取器(如 SqlDataReader 或 OleDbDataReader 对象)支持,而在 ADO 中则由只进/只读 Recordset 对象支持。顺序的、只读游标为从数据库中读出数据提供最快的方法。

    可滚动、可更新的服务器端游标在 ADO 中由可滚动、可更新的 Recordset 对象支持。应谨慎使用服务器端游标。通过服务器端游标进行的针对结果的非顺序滚动和更新操作会保持锁定并导致资源争用,这将大大限制应用程序的可缩放性。不使用可滚动、可更新的服务器端游标,而在服务器上对结果的过程处理使用存储过程,应用程序通常会获益。

  • 数据访问连接   ADO.NET 和 ADO 都支持到数据库的显式连接。在 ADO.NET 中,开发人员可使用数据读取器,同时基于当前位置保持锁定状态,并且在读取数据前需要到数据库的连续连接。或者,数据可放到数据集中。使用数据集时,开发人员可进行以下选择:修改数据集中的数据时保持连接和事务处于打开状态;或者只在需要将数据填充到数据集并将更改更新回数据库时才打开连接并使用事务。当正在传输、查看和修改数据集中的数据时,关闭连接可为其他用户释放资源和锁定。在 ADO 中,记录集可在用户通读数据库中的数据时使用打开的连接并保持锁定,或者使用客户端游标记录集,这样可在不保留数据库连接的情况下处理数据。
  • 数据滚动   ADO.NET 和 ADO 既可按顺序浏览数据,也可不按顺序浏览数据。使用 ADO.NET 数据集,还可以方便地从一个数据表中的一行浏览到另一个表中的相关行。ADO 记录集和 ADO.NET 数据阅读器都支持高速、只能向前、只读的服务器端游标。ADO 记录集唯一支持可滚动、可更新的服务器端游标,尽管这种游标使用服务器资源,并且大多数情况下可以更好地以存储过程中的逻辑的形式实现,或者以松耦合的客户端游标的形式实现。
  • 使用简易   ADO.NET 数据集提供自我描述的数据,并免除了处理基础数据构造(如表、列、约束和行)的需要。相反,利用数据集,可使用对象对数据进行类型安全的访问。这使得程序更易读、写和修改。由于应用程序层可以通过 XML 格式的数据集交换数据,因此在应用程序的生命周期中可以方便地实现新的扩展通信。使用 ADO.NET 时,使用哪种语言进行数据访问无关紧要:它们在语法上都是类似的,并使用相同的公共语言运行库服务。

    虽然 ADO.NET 和 ADO 都支持松耦合的数据访问,但二者存在差异。利用 ADO.NET,可通过修改 DataAdapter 对象使用的语句,或通过插入可响应行更新事件的自定义代码,来控制数据集更改传输到数据库的方式。使用该功能可以优化性能、修改验证检查或添加其他任何额外处理,所有这些操作都不必更改您的应用程序。有关更多信息,请参见 .NET 应用程序结构中的问题

选择 OLE DB

如果选择直接写入 OLE DB,则必须与使用更方便的数据访问方法(如 ADO.NET 或 ADO)相对照来对该选择进行评估。影响您决定使用 OLE DB 的 COM 级别数据访问的因素包括:

  • 性能   ADO.NET 和 ADO 的速度都非常快,但是它们在使用 OLE DB 数据源时,在应用程序和数据提供程序之间插入了一个额外的抽象层。如果您的后端数据库是 Microsoft SQL Server,并且您是使用托管代码进行编写的,则 SQL Server .NET Framework 数据提供程序会提供最佳性能,这是由于它跳过了 ADO 和 OLE DB 所造成的系统开销并通过网络驱动程序与服务器直接通信。如果对于非 SQL Server 数据库来说性能较为重要,则最好使用 OLE DB 以 Visual C++ 进行编码。在其他的第三方数据提供程序中可能还有额外的选项。
  • 功能   OLE DB 所定义的本机接口具有广泛性和可扩展性,足以公开所有数据库的基础行为、语义和功能。ADO 公开由 OLE DB 接口定义的通用功能的子集,ADO.NET 提供的通用对象用于处理隐藏不同源的行为、功能和类型系统之间的区别的数据。如果需要访问特定数据库的本机行为、功能和数据类型,则 OLE DB 为数据源提供最全面的本机接口。
  • 维护   使用 OLE DB 数据访问技术将影响应用程序长期维护的成本。使用 OLE DB 比使用 ADO.NET 或 ADO 的代价都高,这是由于维护和改进复杂的代码更加困难。
  • 开发人员技能   COM 环境中的本机编码需要相当多的编程技能。向 OLE DB 接口写入是一项十分复杂且难度很大的任务。如果您的工作人员具有 OLE DB 和 COM 专门技能,则可以选择 OLE DB 并利用这种经验。
  • 语言   如果选择 OLE DB 作为您的数据访问技术,则必须使用 Visual C++ 编程。可以使用“OLE DB 模板”库中的使用者模板和提供程序模板使编程稍微容易一些。有关更多信息,请参见 OLE DB 模板

如果您的应用程序需要 OLE DB 的高性能和原始操控能力,而您具有向系统级别编程接口写入的技能,并且愿意承担成本较高的长期维护费用,那么 OLE DB 便是很好的选择。

原创粉丝点击