薛 源
(同济大学,中国上海200093)
ASP.NET 是Microsoft.NET 平台下的一部分。 它实现了Web 应用程序的快速开发。 其中连接数据库的主流技术是通过ADO.NET 或ADO 实现的。本文基于ASP.NET 框架,介绍ADO 和ADO.NET 两种数据库访问技术,然后就进行分析和研究。
ActiveX Data Objects (ADO)是微软的一种数据访问技术。 它被设计用来和数据访问层OLE DB Provider 一起协同工作, 以提供通用数据访问(Univer-sal Data Access)。 OLE DB 是一个低层的数据访问接口,并基于微软公司的COM 技术,用它可以访问各种数据源,其模型如图1 所示。ADO 的3 个主要组成对象是:Connection、RecordSet 和Command。
图1 ADO 工作原理图
(1)Connection 对象: 用于表示和数据源的连接,以及处理一些命令和事物。
(2)Command 对象:用于执行某些命令来进行诸如查询、修改数据库结构的操作,并将返回结果存在Recordset 对象中。 也可以进行批操作和操纵数据库的结构, 当然, 这需要使用的OLE DB Provider 提供相应的支持。 此外,可以将一个激活的Connection 对象绑定到Command 对象的ActiveConnection 属性, 这使得多个Command 对象实例可以共用一个Connection 对象。
(3)RecordSet 对象:用于处理数据源的表格集,它是在表中修改、检索数据的最主要的方法。 这些结果由数据的行(记录)和列(字段)组成。
ADO 的几个对象间的关系结构图如图2 所示。
图2 ADO 结构图
使用ADO 访问数据元的特点可以概括如下:
(1)易于使用,可以说这是ADO 最重要的特点之一。
(2)ADO 是高层数据库访问技术,相对与ODBC 来说,具有面向对象的特点。
(3)在ADO 对象结构中,对象与对象之间的层次结构不是非常明显,这会给编写数据库程序带来更多的便利。比如,在应用程序中如果要使用记录集对象,不一定要先建立连接、回话对象,如果需要就可以直接构造记录集对象。
(4)可以访问多种数据源。 和OLE DB 一样,使应用程序具有很好的通用性和灵活性。
在ASP.NET 中使用ADO 时,首先要注意下面两点:
(1)将set objCnn=server.CreateObject(″ADODB.Connection″)
Set objRS=server.CreateObject(″ADODB.Recordset″)
改成:objCnn=server.CreateObject(″ADODB.Connection″)
...
objRS=server.CreateObject(″ADODB.Recordset″)
(2)为了在ASP.NET 网页里调用、使用STA(Single Thread Apartment) 的COM 组件, 程序必须在<% @Page...>前导指令加上aspcompat=”true”属性;其余便和ASP 网页使用ADO 一样。 下面以一范例部分代码为示例。
ADO.NET 是对ADO 的继承,是一个用来存取数据和信息的API。它提供与OLE DB 接口兼容的数据源的数据存取接口,应用程序可以使用ADO.NET 连接到这些数据源来获取、 操纵和更新数据; 还提供SQLServer 编程接口, 对SQL Server 数据库访问效率比OLE DB 接口访问SQL Server 数据库效率高。其模型如图3 所示。ADO.NET 的核心组件主要有三类,即Connection、DataSet 和Command。另外还添加了许多新的对象和程序化接口, 如:DataAdapter、DataView、DataReader 等等。
图3 ADO.NET 工作原理图
(1)Connection 对象:Connection 对象在应用程序和数据库之间建立连接。通过SQL Connection 对象建立与SQL Server 数据库的链接到支持ADO Managed Provider 的数据来源。
(2)Command 对象:是设置SQL 命令、传递系统参数以及取得数据结果等,可以通过SQLCommand 对象直接操作SQLServer 数据库,通过OLEDB Command 操作支持Managed Provider 的数据来源。
(3)DataSet 对象:DataSet 不是一个RecordSet, 而是类似数据库(DataBase),在DataSet 中可以包含任意数量的数据表(DataTable),且每个表对应一个数据库的数据表(Table)或视图(View)。
(4)DataAdapter 对象: 它是提供连接DataSet 对象和数据源的桥梁,并且DataAdapter 使用Command 数据源中执行的SQL 命令,以便将数据加载到DataSet 中,并使对DataSet 中数据的更改与数据源保持一致。
ADO.NET 的几个对象间的关系结构如图4 所示。
图4 ADO.NET 结构图
下面是一个简单的ADO.NET 应用程序, 它从数据源中的三个表中返回结果并将其输出到窗口的DataGrid 中:
ADO 与ADO.NET 既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作应用程序,并且易于使用、速度快,内存支出低、 占用磁盘空间较少, 支持用于建立基于客户端/服务器和Web 的应用程序的主要功能。但是,他们也具有以下四个方便的差异,而它们的差异,换句话说,也是ADO.NET 的优点所在。
(1)缓存中数据集的存储形式。
ADO 中数据是以RecordSet 形式存储, 它的数据来源于多个表,但在内存中选择只能集中和显示在一个表中;ADO.NET 中的数据集是DataSet,它在缓存中可以是一个或多个表的数据库。
(2)脱机与连机关系。
ADO.NET 采用的是离线数据集(Disconnect DataSet),ADO.NET 利用XML 制作数据的一份副本(快照副本snapshot),它除了制作副本时在线,其他时间都是离线的。而ADO 却是一直与服务器连着的在线型访问,数据访问代价比较大。
(3)标准化程度。
XML 对ADO 支持非常有限,而ADO.NET 的设计包含了被广泛接受的XML 标准,用户与Web 信息共享及异构应用数据交换。
(4)传输性能。
传输性能方面ADO.NET 更强。 ADO 基于COM 技术, 必须符合COM 的规范,而ADO.NET 基于XML 数据格式,数据类型更为丰富,它不需要由COM 编排而进行数据类型转换。 另外防火墙通常配置只允许HTML 文本通过,因为DataSet 序列化格式是XML,所以防火墙可以允许DataSet 通过,阻挡ADO 的记录集。
ADO.NET 是新型的DotNET 数据库访问技术接口,它支持工业技术标准,集合了所有用于数据处理的类。 这些类代表了数据容器对象,它们以典型的数据库功能为特色,如索引、排序和浏览,且ADO.NET是DotNET 数据库应用程序最终的解决方案,它以整体设计为特色,而不是以数据库为核心的ADO 模型。 ADO.NET 集成了ADO 对象模型与OLE DB 接口,图1 和图3 结合起来,可以体现这一点。 所以,ADO.NET 访问技术不仅在以上四个方面比ADO 强, 而且在功能上增进不少,尤其为Web 应用程序的设计提供了一个更稳定、更具有扩展性的数据库存取技术,因此掌握ADO.NET 技术具有更深远的意义。
[1]陈志泊.ASP.NET 数据库应用程序开发教程[M].北京:人民邮电出版社,2005:86-87.
[2]廖信彦.ASP.NET 交互式Web 数据库程序设计[M].北京:中国铁道出版社,2003:102-138.
[3]田启明.VB 中基于ADO 的数据库访问方法[J].电脑开发与应用,2004,17(6):33-34.