ADO.NET 概念详解

来源:互联网 发布:Python 构造报文 编辑:程序博客网 时间:2024/05/17 16:56

ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO.NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。       
ADO.NET 提供对 Microsoft SQL Server 等数据源以及通过 OLE DB 和 XML 公开的数据源的一致访问。数据共享使用者应用程序可以使用 ADO.NET 来连接到这些数据源,并检索、操作和更新数据。       

ADO.NET 有效地从数据操作中将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。ADO.NET 包含用于连接到数据库、执行命令和检索结果的 .NET 数据提供程序。您可以直接处理检索到的结果,或将其放入 ADO.NET DataSet 对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。ADO.NET DataSet 对象也可以独立于 .NET 数据提供程序使用,以管理应用程序本地的数据或源自 XML 的数据。       

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

如今大部分的应用程序都需要后台的数据库来为其提供大量的数据来源,而应用程序与数据库之间的交流称为数据访问。而ASP.NET则使用ADO.NET(Active X Data Object)作为数据的访问与操作的协议,从而使得我们可以在Internet上操作这些数据。      

ADO.NET的数据访问分为两大部分:数据集(DataSet)与数据提供源(Data Provider)数据提供源,不要和“数据源”—Data Source搞混。      

数据集:      
数据集是一个非在线,完全由内存表示的一系列数据,可以被看作一份本地磁盘数据库中部分数据的拷贝。数据集完全驻留内存,可以被独立于数据库地访问或者修改。当数据集的修改完成后,更改可以被再次写入数据库,从而保留我们所做过的更改。数据集中的数据可以由任何数据源(Data Source)提供,比如SQL Server或者Oracle。      

数据提供源:      
数据提供源用于提供并维护应用程序与数据库之间的连接。      
数据提供源是一系列为了提供更有效率的访问而协同工作的组件。如今微软在ADO.NET中提供了两组数据提供源,一组叫做SQL Data Provider(SQL数据提供源),用于提供应用程序与SQL Server 7.0或者更高版本的访问。另一组叫做OleDb DataProvider(Object Linking and Embedding DataBase DataProvider),可以允许我们访问例如Oracle 之类的第三方数据源。      

每组数据提供源中都包含了如下四个对象:    
Connect对象提供了对数据库的连接。      
Command对象可以用来执行命令。      
DataReader对象提供了只读的数据记录集。      
DataAdapter对象提供了对数据集更新或者修改的操作。      

总体来说,使用ADO.NET访问数据可以被概括为以下步骤:      
首先应用程序创建一个Connect对象用来建立与数据库之间的连接。然后Command对象提供了执行命令的接口,可以对数据库执行相应的命令。当命令执行后数据库返回了大于零个数据时,DataReader会被返回从而提供对返回的结果集的数据访问。或者,DataAdapter可以被用来填充数据集,然后数据库可以由Command对象或者DataAdapter对象进行相应的更改. 
     

具体来看数据提供源的四种对象        
Connect 对象    
Connect对象用来提供对数据库的连接,Microsoft Visual Studio .Net中微软提供了两种Connect对象,分别为SqlConnection对象,用来提供对SQL Server 7.0或更高版本的连接,同时还有OleDbConnection对象,用来提供对Access与其他第三方数据库的连接。      

Command 对象      
同样,Command对象分为两组,SqlCommand与OleDbCommand。Command对象被用来执行针对数据库的命令,比如执行数据库的存储过程(Stored Procedure),SQL命令,或者直接返回一个完整的表。Command对象提供三种方法(Methods)用来执行上述操作。      
ExecuteNonQuery用来执行一个不需返回数据的命令,比如表的插入,更新或者删除操作。      
ExecuteScalar返回从一个查询得到的单独的值。      
ExecuteReader用来返回一个从DataReader来的结果集。      

DataReader对象      
DataReader提供了forward-only, read-only, connected stream的结果集。      
这里的forward-only表示数据只能够向前,如果我们访问了一条数据后想要再次访问这条数据就必须重新开始。      
Read-only表示只读,不能够对结果集进行操作。      
Connected stream表示DataReader对象是面向流连接的。所谓的流可以把它看作是管道,这边放进去东西那边就可以得到,实际上TCP协议就是面向连接的流协议。      
不同于其他的三种对象,DataReader不能够被用户直接创建,必须也只能由ExecuteReader返回。      
SqlCommand.ExecuteReader返回SqlDataReader。      
同理,OleDbCommand.ExecuteReader返回OleDbDataReader      
需要注意的是,DataReader对应用程序提供行级访问(每次只能访问数据的一行),当你需要多行的时候就需要多次的访问这个对象。这样做的好处就是内存中永远只需要保留一行的数据,缺点就是每次访问都要开启Connect的连接。      

DataAdapter对象      
DataAdapter对象是ADO.NET数据访问的核心。实际上它是数据集与数据库的中间层。DataAdapter可以使用Fill方法来为DataTable或者DataSet填充数据。然后当内存操作完成后DataAdapter可以确认之前的操作从而对真正存于数据库上的数据进行修改。      
DataAdapter包含四种属性用来代表不同的数据库命令:      
SelectCommand用来查询数据      
InsertCommand用来插入数据      
DeleteCommand用来删除数据      
UpdateCommand用来更新数据当Update方法被调用后,数据集中的数据被更改然后拷贝回数据库,紧接着使用InsertCommand, DeleteCommand, UpdateCommand中合适一个来进行数据更新。