以前,数据处理主要依赖于基于连接的双层模型。当数据处理越来越多地使用多层结构时,程序员正在向断开方式转换,以便为他们的应用程序提供更佳的可缩放性。

XML 和 ADO.NET

ADO.NET 借用 XML 的力量来提供对数据的断开式访问。ADO.NET 的设计与 .NET 框架中 XML 类的设计是并进的——它们都是同一个结构的组件。

ADO.NET 和 .NET 框架中的 XML 类集中于 DataSet 对象。无论 DataSet 是文件还是 XML 流,它都可以使用来自 XML 源的数据来进行填充。无论 DataSet 中数据的数据源是什么,DataSet 都可以写为符合 WWW 联合会 (W3C) 的 XML,并且将其架构包含为 XML 架构定义语言 (XSD) 架构。由于 DataSet 固有的序列化格式为 XML,它是在层间移动数据的优良媒介,这使 DataSet 成为以远程方式向 XML Web services 发送数据和架构上下文以及从 XML Web services 接收数据和架构上下文的最佳选择。

DataSet 也可与 XmlDataDocument 进行同步,以实时地提供对数据的关系和分层访问。有关更多信息,请参阅使 DataSet 与 XmlDataDocument 同步

ADO.NET 组件

设计 ADO.NET 组件的目的是为了从数据操作中分解出数据访问。完成此任务的是 ADO.NET 的两个核心组件:DataSet 和 .NET 数据提供程序,后者是一组包括 ConnectionCommandDataReaderDataAdapter 对象在内的组件。

ADO.NET DataSet 是 ADO.NET 的断开式结构的核心组件。DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关 DataTable 对象中数据的关系信息组成。

ADO.NET 结构的另一个核心元素是 .NET 数据提供程序,其组件的设计目的相当明确:为了实现数据操作和对数据的快速、只进、只读访问。Connection 对象提供与数据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。

可以为任何数据源编写 .NET 数据提供程序。.NET 框架附带了两个 .NET 数据提供程序:SQL Server .NET 数据提供程序和 OLE DB .NET 数据提供程序。

下图阐释了 ADO.NET 结构的组件。

ADO.NET 结构

在层和客户端之间对数据进行远程处理或封送

DataSet 的设计使您能够使用 XML Web services 方便地通过 Web 将数据传输到客户端,并允许您使用 .NET 远程处理服务在 .NET 组件之间封送数据。您还可以通过这种方式对强类型的 DataSet 进行远程处理。有关 XML Web services 的概述,请参阅 XML Web services 概述。有关从 XML Web services 使用 DataSet 的示例,请参阅从 XML Web services 使用 DataSet。

有关远程处理服务的概述,请参阅 .NET 远程处理概述。请注意,DataTable 对象也可以与远程处理服务一起使用,但不能通过 XML Web services 进行传输。

ADO.NET 平台要求

支持 Microsoft .NET 框架 SDK(包括 ADO.NET)的平台包括:Microsoft® Windows® 2000、Microsoft® Windows NT® 4(带 Service Pack 6a)、Microsoft® Windows® Millennium Edition、Microsoft® Windows® 98 和 Microsoft® Windows® SE。若要使用 SQL Server .NET 数据提供程序或 OLE DB .NET 数据提供程序,则必须安装 Microsoft Data Access Components 版本 2.6 或更高版本。

以下代码示例显示如何将 System.Data 命名空间包含在您的应用程序中以使用 ADO.NET。

using System.Data;

ADO.NET 类在 System.Data.dll 中,并且与 System.Xml.dll 中的 XML 类集成。当编译使用 System.Data 命名空间的代码时,将引用 System.Data.dll 和 System.Xml.dll。有关使用命令行编译器编译 ADO.NET 应用程序的示例,请参阅 ADO.NET 示例应用程序

选择 DataReader 或 DataSet

当确定应用程序应使用 DataReader(请参阅使用 DataReader 检索数据)还是应使用 DataSet(请参阅创建和使用 DataSet)时,应考虑应用程序所需的功能类型。DataSet 用于执行以下功能:

如果不需要 DataSet 所提供的功能,则可以使用 DataReader 以只进只读方式返回数据,从而提高应用程序的性能。虽然 DataAdapter 使用 DataReader 来填充 DataSet 的内容(请参阅从 DataAdapter 填充 DataSet),但可以使用 DataReader 来提高性能,因为您将节省 DataSet 所使用的内存,并省去创建 DataSet 并填充其内容所需进行的处理。