四个核心对象:Connection对象、Command对象、DataReader对象和DataAdapter对象如何操作数据的,按照这个思路讲解大家对ADO.NET对象的概念理解不是很透彻,为了更好地理解ADO.NET的架构模型的各个组成部分,我们可以对ADO.NET中的相关对象进行图示理解,如图所示的是ADO.NET中数据库对象的关系图。
讲究完关系图后,为了加深大家的理解,我们可以用趣味形象化的类比理解ADO.NET对象模型的各个部分,如图所示,可以看出这些对象所处的地位和对象间的逻辑关系。
对比ADO.NET的数据库对象的关系图,我们可以用对比的方法来形象地理解每个对象的作用,如上图所示。
1.
2.
3.
4.
5.
6.
进水笼头——建立Connection
Connection表示与数据源之间的连接。可根据Connection对象的各种不同属性来指定数据源的类型、位置及其他属性,可用它来与数据库建立连接或断开连接。对于不同类型的水库,进水笼头规格和型号也不同,.NET Framework数据提供程序也有不同的Connection,如针对SQLServer的SqlConnection、针对Oracle的OracleConnection、针对MySQL的MySqlConnection、针对OLEDB的OleDbConnection等。
抽水机——Command
Command对象封装了与用户想要完成的动作相关的数据库命令,在一般情况下这些命令就是SQL语句。抽水机为了方便使用,提供了3个常用的抽水方法
1.
2.
3.
输水管——DataAdapter
DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使DataSet中数据的更改与数据源保持一致。DataAdapter就像一根输水管,通过发动机,把水从水源输送到水库里进行保存。
输水管——DataReader
通过执行ExecuteReader方法可以返回一个DataReader对象。DataReader以只进、只读方式返回数据,从而提高应用程序的性能。这样可以节省DataSet所使用的内存,并省去创建DataSet并填充其内容所需的处理。
DataReader也是一种水管,和DataAdapter不同的是,DataReader不把水输送到水库里面,而是单向地直接把水送到需要水的用户那里或田地里,所以要比经过水库中转一下更快。
为了获得更佳的输水性能,完成输水之后一定要关闭DataReader。如果使用Connection只返回DataReader,那么关闭DataReader之后立刻关闭它。另外一个显式关闭Connection的方法是将CommandBehavior.CloseConnection传递给ExecuteReader方法,以确保关闭DataReader时相应的连接也被关闭。特别是我们从一个方法返回DataReader,而且无法控制DataReader的相关连接是否关闭,则使用CommandBehavior.CloseConnection特别有用。
随用随关,释放资源
对于C#程序员来说,确保始终关闭Connection和DataReader对象的一个方便的方法就是使用using语句。using语句在离开自己的作用范围时,会自动调用“全自动安全阀”自动关闭相应的对象。例如:
using(SqlConnection myConnection=newSqlConnection(connectionString))
{
SqlCommandcmd=myConnection.CreateCommand();
cmd.CommandText="SELECT*FROMP_Product";
myConnection.Open();
using(SqlDataReader
{
//使用SqlDataReader的代码略
}/离开了这个范围自动关闭SqlDataReader对象Dr
}//离开了这个范围自动关闭myConnection
水库管理——DataSet
DataSet是ADO.NET中最核心的成员之一,是各种基于.NET平台程序语言的数据库应用程序开发最常接触的类,这是因为DataSet在ADO.NET实现从数据库中抽取数据的作用。数据抽取后,DataSet就是数据的存放地,它是各种数据源(SQLServer、OLEDB等)的数据在计算机内存的缓存,所以有时说DataSet可以看成是一个数据容器(又称数据集)。在客户端通过对DataSet的数据集读取、更新等操作,从而实现对数据源的同等操作。
DataSet的最大优点是离线和连接。DataSet既可以以离线方式,也可以以实时连接方式来操作数据库中的数据。这样的好处是大大减少了服务器端数据库的连接线程,从而大大地减少了服务器端的运行压力。所以,在数据量不大的情况下,使用DataSet是最好的选择。
DataSet的基本工作过程:应用程序一般并不直接对数据库进行操作,而是先完成和数据库的连接,接着通过数据适配器(DataAdapter)把数据库中的数据填入DataSet对象,然后客户端再通过读取DataSet来获得需要的数据,同样,在更新数据库中的数据时,也是首先更新DataSet,然后再通过DataSet和数据适配器将更新的数据同步地解释入数据库中。
水池子——DataTable
每一个DataSet都是一个或多个DataTable对象的集合,这些对象由数据行(DataRow)、数据列(DataColumn)、字段名(ColumnName)、数据格(Item),以及约束(Constraint)和有关DataTable对象中数据的关系(Relations)组成。我们要使用的时候,必须知道我们要使用哪个水池子中的水,代码是DataSet对象.DataTable[“水池子名称”]。
以上通过抽水过程类别讲解了ADO.NET对象模型,通过对比相信大家明白了这几个对象是如何相互配合来操作数据的。