如今大部分的应用程序都需要后台的数据库来为其提供大量的数据来源,而应用程序与数据库之间的交流称为数据访问。而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中合适一个来进行数据更新。