随着网络技术的发展,网络数据库以及相关的操作技术也越来越多的应用到实际当中,而数据库操作技术也是不断的发展完善。数据库访问技术从ODBC,到DAO,到RDO,再到现在的ADO和OLE DB。然而在关系数据库流行的今天,这些数据库访问技术都不是尽如人意。随着微软.NET战略的推进,各种新技术正不断为广大编程人员所接受。在数据库访问技术方面,.NET框架有它自己的数据库访问API-ADO.NET。不过尽管ADO.NET和ADO的名称很相似,但是ADO.NET不是为了ADO适应.NET框架而改进的,它们是两种完全不同的数据库访问技术。ADO.NET对数据库的访问做了大大的简化,所以相对而言容易学习,但是它的功能相对以前的技术却是飞越式的进步。在本章里我们主要学习ADO.NET这种全新的数据库访问技术。
8.1 ADO.NET简介
8.1.1 ADO.NET与ADO的比较
ADO数据库访问技术曾经让人们欣喜若狂,它是严格的基于COM的,也因此能够微软的平台下利用纪录集灵活的操作数据:从表示层(UI),到业务逻辑层(ADO),再到数据层(DataBase)。ADO纪录集(Recordset)的灵活性足以使用户能够轻而易举的定位纪录,或使用过滤器和书签。他们提供排序、自动分页和持久性等功能,并能在数据库断开时工作。可以在多层自检高效地汇集纪录集。但也是因为其严格的基于COM,所以只能在一种系统平台下使用――Windows。当目前的分布式访问模式越来越多的时候――比如涉及到大型机或是UNIX平台下的异构类节点,ADO显然已经力不从心。目前的Web时代是个倾向兼容的时代――倾向平台的兼容性,要求我们的程序能够访问不同平台下的数据,能够使用不同平台下的数据操作的编程接口,也因此,ADO技术向ADO.NET改进(也可以说出革命)是技术的必然。
ADO.NET是.NET FrameWork SDK中用以操作数据库的类库的总称。ADO.NET相对于ADO的最大优势在于对于数据的更新修改可以在与数据源完全断开连接的情况下进行,然后再把数据更新情况传回到数据源。这样大大减少了连接过多对于数据库服务器资源的占用。使用ADO.NET的任何软件解决方案的中心都是数据集(DataSet模型)。数据集是内存中的数据库数据的副本。一个数据集包括许多数据表,每个数据表一般都对应一个数据库表格或视图。一个数据集组成了一个"断开的"数据库数据的视图。说得更精确些,数据集存在于内存中,没有到包含相应表格或视图的数据库的活动的连接。这种断开的体系结构在读写数据库时,只使用数据库服务器资源,从而具有更大的可收缩性。运行时,数据从数据库传递给中间层商务对象,然后将其继续传递给用户界面。
为了适应数据ADO的交换,ADO .NET使用了一种基于XML的暂留和传输格式。说得更精确些,为了将数据从一层传送给另一层,ADO.NET解决方案以XML格式表示内存数据(数据集),然后将XML发送给另一个组件。XML格式是最为彻底的数据交换格式,可以被多种操作数据接口所接受,能穿透公司防火墙,也因此,ADO.NET具有了跨平台性和良好的交互性。
ADO.NET有两个核心组件:DataSet和.NET data provider,.NET data provider被用来连接数据库,执行SQL命令以及检索数据集。.NET Framework包括SQL Server .NET Data Provider(面向Microsoft SQL Server 8.0及以后版本)和OLE DB .NET Data Provider,SQL Server .NET Data Provider在连接和处理SQL Server数据库时是最高效的,因为它使用了特别针对SQL Server的协议和优化处理,在System.Data.Sqlclient名称空间中包含了所有的SQL Server .NET Data Provider类 。OLE DB .NET Data Provider用来支持OLE DB接口。ADO.NET可以提供以下OLE DB Providers:SQLOLEDB - Microsoft OLE DB Provider for SQL Server ; MSDAORA - Microsoft OLE DB Provider for Oracle ; Microsoft. Jet.OLEDB.4.0-OLE DB Provider for Microsoft Jet。System.Data. Oledbclient名称空间包含了所有的OLE DB .NET Data Provider类 。因此在程序中要包含你想要的Data Provider的名称空间。
ADO.NET数据库访问技术的之所以有诸多的优越性,是因为ADO.NET对象的基本原理和根源都是DataSet对象模型。DataSet是ADO记录及的延伸。DataSet类是ADO.NET中最核心的成员之一,也是各种开发基于.NET平台程序语言开发数据库应用程序最常接触的类。之所以DataSet类在ADO.NET中具有特殊的地位,是因为DataSet在ADO.NET实现从数据库抽取数据中起到关键作用,在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,是独立存在于内存中的数据库视图,所以有时说DataSet可以看成是一个数据容器。同时它在客户端实现读取、更新数据库等过程中起到了中间部件的作用(DataReader只能检索数据库中的数据)。
各种.NET平台开发语言开发数据库应用程序,一般并不直接对数据库操作(直接在程序中调用存储过程等除外),而是先完成数据连接和通过数据适配器填充DataSet对象,然后客户端再通过读取DataSet来获得需要的数据,同样更新数据库中数据,也是首先更新DataSet,然后再通过DataSet来更新数据库中对应的数据的。DataSet对象模型可以直接读写 XML 文件,然后将数据存储到数据库中的表,也可以从数据库中读取数据表,保存到 XML 文件中。