吴江波

ADO.NET和ADO的比较

ADO.NET和ADO的比较

刘敦敏
(徐州卷烟厂 技改处,江苏 徐州 221005)

摘 要:
主要论述了微软网络开发的新技术ASP.NET中的重要的组件——ADO.NET的优点,并与ADO技术作了比较。在文章的后面还举例说明了ADO.NET组件访问数据库的优点。
关键词:
ADO.NET;XML格式;数据库

   随着微软公司.NET技术推出,全世界兴起了一股学习.NET的热潮,特别是其中的ASP.NET技术,是创建动态Web页的一个强大的新技术。这种技术远比ASP技术成熟,使用更灵活。我国的烟草信息化建设也正处于高潮迭起的时期,烟草信息化的发展离不开ASP.NET新技术,ASP.NET技术将能有力地推动烟草事业的发展。ADO.NET组件是ASP.NET技术的核心组件,它提供了强大的数据访问方法,所以了解学习ASP.NET就必须先了解ADO.NET。

1 ADO.NET的优点
   ADO.NET是由.NET Framework为与数据库中的数据进行交互而提供的一组对象类的名称,是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。
   a.ADO.NET可交互的数据更广泛。
   ADO.NET可以与许多类型的对象交互,不仅有存储在数据库中的数据,还有存储在电子邮件服务器文本文件应用程序文档(例如Excel电子表格)和XML中的数据。ADO.NET允许从源中选择相当抽象的数据,数据库管理员只需授予使用数据的一个视图的权限接口,即使没有访问数据源其他内容的权限,也可以使用ADO.NET把数据放在ASP.NET页面上。
   ASP.NET还提供了一种比传统ASP更容易格式化页面上的数据格式:DataGrid,它可以创建大多数的HTML标记,它与ADO.NET的对象相结合,可以轻松地把各种数据以多种形式上传到页面上。而且,ADO.NET还提供了以XML格式处理数据的工具。
   b.在ADO.NET中,我们将处理断开连接的数据集,将打开连接的时间降至最低。在网站的访问者请求数据时就要建立连接,传送数据,之后关闭连接。接着,访问者就可以修改数据,但这些修改不会在数据源中立即更新——在用访问者所做的修改更新数据库之前,必须重新打开连接。例如"选择(select)"或"更新(update)",你就可以将行读入数据集(DataSet)对象中,然后在不保持与数据源的连接的情况下使用它们。在ADO中,记录集可以提供不连接的访问,但ADO主要是为连接的访问设计的。
   ADO和ADO.NET中的不连接处理数据之间存在一个显著的差异。在ADO中,使用OLE DB供应程序和ODBC驱动程序来与数据库通信。在ADO.NET中,是托管的数据供应程序完成这个任务。
   .NET提供了两个托管的供应程序:
   (1)Managed Provider for SQL Server,仅能于SQL Server通信。因为这个供应程序只需要于一个数据库通信,所以它是最优的,速度很快。
   (2)Managed Provider for OLE DB基于OLE DB,可以于有OLE DB 供应程序的数据仓库通信,但它不是专用的托管的供应程序。
   c.ADO.NET可以在应用程序间共享数据。
   在应用程序间传输ADO.NET数据集比传输ADO不连接的记录集要容易得多。若要将ADO不连接的记录集从一个组件传输到另一个组件,应使用COM。若要在ADO.NET中传输数据,应使用数据集,它可以传输XML流。相对于COM,XML文件的传输提供以下便利之处:
   ①更丰富的数据类型。COM封送提供一组有限的数据类型。由于ADO.NET中的数据传输是基于XML格式,所以对数据类型没有限制。因此,共享数据集的组件可以使用这些组件一般会使用的任何丰富的数据类型。
   ②性能。传输大型ADO记录集或大型ADO.NET数据集会使用网络资源,随着数据量的增长,施加于网络的压力也在增加.ADO和ADO.NET都可以最大限度地降低所传输的数据.但ADO.NET还提供另一个性能优势:ADO.NET不需要数据类型转换.而需要COM封送来在组件间传输记录集的ADO,则需要将ADO数据类型转换为COM数据类型。
   ③穿透防火墙。防火墙可以影响试图传输不连接的ADO记录集的两个组件.防火墙通常配置为允许HTML文本通过,但防止系统级请求(如COM封送)通过.因为组件使用XML交换ADO.NET数据库,所以防火墙可以允许数据集通过。
   d.可编程性。
   利用Visual Studio.NET,你可以对你的对象进行编程,而不是某一个数据表或某一个数据列。ADO.NET采用强类型编程,可以更好的表述业务对象。
   例如,在以下的代码行中采用了传统的程序设计(不是强类型的):
   IF TotalCost > Table("Customer").Column("AvailableCredit")
   在这个例子中,采用的是关联的、抽象的方式对ADO表和列进行编程。
   如果采用强类型编程,事情就变得简单多了:
   IF TotalCost > Customer.AvailableCredit
   除了能够方便阅读,强类型代码也更加容易编写。特别是依靠语句自动补写功能,你编写的对象也能够识别。在下例中可以看到,利用IntelliSense(智能感应)技术,可以方便的找到与Customers相关的表。


图1 强类型编程和IntelliSense

   此外,强类型数据集有更高的执行速度,因为应用程序不必在每次访问数据成员时都去ADO对象集合中查找了。
   e.运用DataSet(数据集)。
   任何采用ADO.NET的应用方案中最重要的就是数据集(DataSet)了。数据集是指数据库数据在内存中的拷贝。一个数据集可以包含任意多个数据表,每一个一般都对应于数据库中的表或视图。数据集组成了一个非连接的数据库数据视图。也就是说,它在内存中,并不和包含对应表或视图的数据库维持一个活动连接。这种非连接的结构体系使得只有在读写数据库时才需要使用数据库服务器资源,因而提供了更好的可伸缩性。由于数据集可以保存多个独立的表并能维护有关表之间的关系的信息,因此它可以保存比记录集丰富得多的数据结构,包括自关联的表和具有多对多关系的表.
   在运行时,数据会从数据库中取出并先传给一个中间层业务对象,然后传至用户界面。为了适应这种数据交换,ADO.NET采用了基于XML的持续的传递格式。也就是说,当数据从一个层传向另一个层时,ADO.NET的方案是将内存中的数据(即数据集)表述为XML,然后以XML格式传递给其他组件。

2 ADO.NET的对象简介
   ADO.NET具有丰富的对象,为我们操纵数据提供了极大的方便,基本的ADO.NET工具是Connection对象,Command对象,和DataSet或DataReader对象。
   ①Connection对象:用于连接数据源,它表示数据源和数据使用者之间的连接。连接字符串为Connection对象提供信息,指定要使用的数据源,以及如何使用该数据源。
   ②Command对象:仅仅连接一个数据源是不够的,还要能读取和修改它,这就是ADO.NET的 Command对象的任务了。该对象包含了可应用于数据库的所有指令,如SELECT、DELETE、 INSERT、UPDATE等,还可以使用它的ExecuteReader()方法创建一个DataReader,在表中显示查询的结果。
   ③DataSet对象:它表示数据库中的数据,是处理数据的核心对象,它可以包含多个表,并建立它们之间的关系,这些关系把一个表中的一行与另一个表中的一行关联起来。
   ④DataAdapter对象:用于把结果从Connection传送给DataSet对象,它的Fill()方法把数据拷贝到DataSet中,Update()方法把DataSet中的数据拷贝回数据源。
   ⑤DataView对象:表示DataSet中存储的DataTables的特定视图。这是要从整个DataSet中读取的记录和列的描述。

3 ASP.NET应用程序
   下面示例是一个ASP.NET应用程序,该程序使用C#作为编程语言,采用前台编码(也可以采用后台编码的形式:即脚本块与HTML显示代码相分离的方法)。使用ADO.NET从Student数据库读取年龄大于16岁学生,通过DataGrid控件输出到页面.该示例创建了一个DataSet对象:ObjDataSet,在此情况下此对象只包含一个数据表,而该数据表的使用方式与ADO记录集的使用方式几乎相同。但请注意,数据集可以由一个或多个构成内存驻留数据库的DataTables、DataRelations和Constrains的集合组成,因此,ADO.NET的数据集比ADO的记录集灵活的多。为了使用ADO.NET,需要导入System.Data和System.Data.OleDb命名空间。如果数据源是SQLServer 数据库,则可以导入System.Data.SqlClient命名空间。
<%Import Namespace="System.Data"%>
<%Import Namespace="System.Data.OleDb"%>
<script Lanuage="c#" runat="server">
void Page_Load()
{
string strConnection="Provider=SQLOLEDB;""server=localhost;"_
&"Integrated Security=SSPI;""Initial Catalog=student");
string strSQL="SELECT * FROM student where age>16";
DataSet ObjDataSet=new DataSet();
OleDbConnection objConnection=new OleDbConnection(strConnection);
OleDbAdapter objAdapter=new OleDbAdapter(strSQL,objConnection);
objAdapter.Fill(objDataSet,"student");
DataView objDataView=new DataView(objDataSet.Tables["student"]);
dgStudentList.DataSource=objDataView;
dgStudentList.DataBind();
}
</script>
<html>
<body>
<h4>Reading data from the connection</h4>
<asp:datagrid id="dgStudentList" runat="server">
</body>
</html>

4 结束语
   设计ADO.NET组件的目的是为了从数据操作中分解出数据访问,DataSet作为ADO.NET的核心组件,能够在断开连接的情况下完成数据的操作。作为两种数据库访问的技术,ADO.NET要比ADO更加灵活,提供的功能更强大。在烟草系统信息化建设的进程中,微软的新技术ASP.NET及其中的ADO.NET组件将会应用更为广泛,并将发挥越来越重要的作用。

作者简介:
刘敦敏,男,硕士研究生,现在徐州卷烟厂技改处工作,已在《继电器》、《武汉大学学报(工学版)》、《计算机应用研究》等核心期刊上发表论文三篇。

posted on 2008-08-13 09:49 吴江波 阅读(247) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。