<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4-1-1 ADO.NET 的优点及主要对象

1. ADO.NET优点<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

ADO.NET 具有互操作性、可维护性、可编程性、性能优化、可伸缩性等优点。与 ADO 的早期版本和其他数据访问组件相比, ADO.NET 提供了若干好处。这些好处分成以下几个类别:

1)互操作性

ADO.NET 应用程序可以利用 XML 的灵活性和广泛接受性。由于 XML 是用于在网络中传输数据集的格式,因此可以读取 XML 格式的任何组件都可以处理数据。实际上,接收组件根本不必是 ADO.NET 组件:传输组件可以只是将数据集传输给其目标,而不考虑接收组件的实现方式。目标组件可以是 Visual Studio 应用程序或无论用什么工具实现的其他任何应用程序。唯一的要求是接收组件能够读取 XML 。作为一项工业标准, XML 正是在谨记这种互操作性的情况下设计的。

2)可维护性

在已部署系统的生存期中,适度的更改是可能的,但由于十分困难,所以很少尝试进行实质的结构更改。这是很遗憾的,因为在事件的自然过程中,这种实质上的更改会变得很有必要。例如,当已部署的应用程序越来越受用户欢迎时,增加的性能负荷可能需要进行结构更改。随着已部署的应用程序服务器上的性能负荷的增长,系统资源会变得不足,并且响应时间或吞吐量会受到影响。面对该问题,软件设计者可以选择将服务器的业务逻辑处理和用户界面处理划分到单独计算机上的单独层上。实际上,应用程序服务器层将替换为两层,这就缓解了系统资源的缺乏。

该问题并不是要设计三层应用程序。相反,它是要在应用程序部署以后增加层数。如果原始应用程序使用数据集以 ADO.NET 方式实现,则该转换很容易进行。请记住,当用两层替换单个层时,将安排这两层交换信息。由于这些层可以通过 XML 格式的数据集传输数据,所以通信相对较容易。

3)可编程性

Visual Studio 中的 ADO.NET 数据组件以不同方式封装数据访问功能,帮助您加快编程速度并减少犯错几率。例如,数据命令提取生成,执行 SQL 语句或存储过程的任务等。

4)性能优化

对于不连接的应用程序,ADO.NET数据库提供的性能优于ADO不连接的记录集。当使用COM封送在层间传输不连接的记录集时,会因将记录集内的值转换为COM可识别的数据类型而导致显著的处理开销。在ADO.NET中,这种数据类型转换则没有必要。

5)可伸缩性

因为 Web 可以极大增加对数据的需求,所以可缩放性变得很关键。 Internet 应用程序具有无限的潜在用户供应。尽管应用程序可以很好地为十几个用户服务,但它可能不能向成百上千个(或成千上万个)用户提供同样好的服务。使用数据库锁和数据库连接之类资源的应用程序不能很好地为大量用户服务,因为用户对这些有限资源的需求最终将超出其供应。

ADO.NET 通过鼓励程序员节省有限资源来实现可缩放性。由于所有 ADO.NET 应用程序都使用对数据的不连接访问,因此它不会在较长持续时间内保留数据库锁或活动数据库连接。

2.        ADO.NET对象

ADO.NET 对象模型中有五个主要的组件,分别是 Connection 对象、 Command 对象、 DataAdapter 对象、 DataSet 对象以及 DataReader 对象。这些组件中负责建立联机和数据操作的部分我们称为数据操作组件( Managed Providers ,分别由 Connection 对象、 Command 对象、 DataAdapter 对象以及 DataReader 对象所组成。数据操作组件最主要是当作 DataSet 对象以及数据源之间的桥梁,负责将数据源中的数据取出后植入 DataSet 对象中,以及将数据存回数据源的工作。下分别对 ADO.NET 的五大基本对象模型进行说明:

1Connection对象

Connection 对象主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在 ADO.NET 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。

2Command对象

Command 对象主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在 Connection 对象上,也就是 Command 对象是通过连结到数据源。

3DataAdapter对象

DataAdapter 对象主要是在数据源以及 DataSet 之间执行数据传输的工作,它可以通过 Command 对象下达命令后,并将取得的数据放入 DataSet 对象中。这个对象是架构在 Command 对象上,并提供了许多配合 DataSet 使用的功能。

4DataSet对象

DataSet 这个对象可以视为一个暂存区( Cache ),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。 DataSet 的能力不只是可以储存多个 Table 而已,还可以通过 DataAdapter 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。 DataSet 对象可以说是 ADO.NET 中重量级的对象,这个对象架构在 DataAdapter 对象上,本身不具备和数据源沟通的能力;也就是说我们是将 DataAdapter 对象当做 DataSet 对象以及数据源间传输数据的桥梁。

5DataReader对象

当我们只需要循序的读取数据而不需要其它操作时,可以使用 DataReader 对象。 DataReader 对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为 DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用 DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

4-1-2  ADO.NET的结构

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
4-5  ADO.NET的承上启下作用图

ADO.NET 如何承接客户端的数据请求,又如何完成数据源的访问?可以通过图 4 5 来说明。这里提到的数据源是个更大的概念,数据库是数据源中的一种, Excel 文件也可能是数据源。

ADO.NET 通过 Connection 对象与数据源相连接,完成架设线路的作用。 Command DataAdapter 对象利用这个 Connection 对象发送命令信号给数据源,这个命令信号可能是 SQL 语句,也可能是存储过程的名字,由数据源执行完成。如果命令信号要求返回数据,客户端就可以利用 DataReader 或者 DataSet 对象访问得到的数据。如果命令信号是其他操作,客户端就可以直接通过 Command 甚至 Connection 对象完成操作。

前面提到 ADO.NET 中的几个对象。那么完整的 ADO.NET 数据对象模型应该是什么样的呢?我们通过图 4 6 来详细了解。

4-6  ADO.NET数据对象模型图

整个对象模型分为两大部分。第一部分是 .NET Framework 数据提供程序部分,第二部分是作为客户端本地缓存的数据集部分。

.NET Framework 数据提供程序部分包括的对象有 Connection 对象, Connection 对象又可以产生事务对象—— Command 对象,与 Command 对象伴生的参数对象, DataReader 对象, DataAdapter 对象,与 DataAdapter 对象伴生的 SelectCommand InsertCommand UpdateCommand DeleteCommand 对象。数据提供程序部分负责建立连接、发布命令、传输数据等功能。

本地缓存数据集部分包括 DataSet 对象, DataSet 对象在本地相当于一个小型数据库,因此 DataSet 对象由数据表及表关系组成,所以 DataSet 对象包含 DataTable 对象和 DataRelation 对象,而数据表又包含行和列以及约束等结构,所以 DataTable 对象包含 DataRow DataColumn Constraint 对象。本地缓存数据集部分可以用来临时存储本地数据,这些数据可以是从数据库获取的,也可以是本地产生的,还可以是被修改的数据。在借助 DataRelation Constraint 对象情况下,客户端可以像访问关系型数据那样访问本地缓存数据集。

ADO.NET 中应用 XML 支持 DataSet 对象,这是由于 XML 主要关注的是关系和分层的结构化数据。 DataSet 的内容可以以 XML 文档的形式写出,也可以将 XML 文档的内容读入到 DataSet 中。