一、前言:
在学习三层架构的时候,我们接触到了Connection、Command、Parameters这些词。不知道你看到了这些是否有种似曾相识的感觉呢?你有没有想到过曾经的红皮书实例呢?相关的介绍,猛戳这里。
二、ADO和ADO.NET的相同之处:
他们都能够编写对数据库服务器中数据进行访问和操作的应用程序,并且易于使用、高速度、低内存支出和占用磁盘空间较少。支持C/S和Web应用程序的主要功能。
二、ADO和ADO.NET的不同之处:
①体系结构和接口不同:
ADO使用OLE DB接口,并基于微软的COM技术。而ADO.NET拥有自己的ADO.NET接口,并且基于微软的.NET体系架构。众所周知,.NET体系不同于COM体系,而ADO.NET接口也就不同于OLE DB接口。所以,不能简单地认为ADO.NET是ADO的“升级版”,也就是说ADO.NET和ADO是两种不同的数据访问方式。
②存储对象不同:
ADO以Recordset存储,而ADO.NET以DataSet存储。Recordset看起来更像单表,如果Recordset以多表的方式表示就必须在SQL中进行多表连接。而DataSet可以是多个表的集合。
③运作方式不同:
ADO的运作是一种在线方式,这意味着无论是浏览或更新数据,都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候,ADO.NET会利用XML制作一个数据的副本,ADO.NET的数据库连接只有在这段时间需要在线。
④细节对比:
三、ADO.NET3.0中用于存取和管理数据的两个主要元件是:.NET Framework数据提供者和DataSet。.NET Framework 数据提供者和DataSet之间的关联性如下图所示。
(一)数据提供者
.NET Framework数据提供者是一种明确设计用于管理数据以及快速存取顺向只读数据的元件。Connection对象会提供资料来源的连接。Command对象可以让开发人员存取数据库命令,以便传回数据、修改数据、执行预存程序。DataReader则可提供来自数据源的高效能数据流。最后DataAdapter会提供DataSet对象与数据源之间连接的桥梁。
(二)DataSet
ado.net DataSet 的设计已明确指出它可独立于任何资料来源外而存取资料。因此,它可与多个不同的资料里来源搭配使用、与 XML 资料搭配使用,或用于管理应用程序的本机资料。DataSet 包含一或多个由资料列和资料行所组成的 DataTable 物件集合,以及 DataTable 物件中的主索引键、外部索引键、条件约束 (Constraint) 及资料的相关资讯。
四、常用对象:
① Connection对象:
和数据库交互,必须连接它。连接帮助指明数据库服务器名称、数据库名称、登录名、密码。以及连接数据库所需的其他参数。Connection对象会被Command对象使用,这样就能够知道在哪个数据源上执行命令。
开发人员使用Command对象来发送SQL 语句给数据库。Command对象使用Connection对象来指出与哪个数据源进行连接。开发人员能够单独使用Command对象来直接执行命令,或者将一个Command对象的引用传递给DataAdapter,它保存了一组进行操作的命令。
② Command对象:
与数据源建立连接后,就可以使用Command对象来执行增删改查等命令;Command对象常有的方法有ExecuteReader()方法、ExecuteScalr()方法、ExecuteNonQuery()方法等。
③ DataReader对象:
许多数据操作要求开发人员只是读取一串数据。DataReader对象允许开发人员获得从Command对象的SELECT语句得到的结果。考虑性能的因素,从DataReader返回的数据都是快速的且只是“向前”的数据流。这意味着开发人员只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果开发人员需要操作数据,更好的办法是使用DataSet。
④ DataSet对象:
DataSet对象是数据在内存中的表示形式。它包括多个DataTable对象,而DataTable包含列和行,就象一个普通的数据库中的表。开发人员甚至能够定义表之间的关系来创建主从关系(parent-child relationships)。DataSet是在特定的场景下使用――帮助管理内存中的数据并支持对数据的断开操作的。DataSet是被所有Data Providers使用的对象,因此它并不像Data Provider一样需要特别的前缀。
⑤DataAdapter对象:
某些时候开发人员使用的数据主要是只读的,并且开发人员很少需要将其改变至底层的数据源。同样一些情况要求在内存中缓存数据,以此来减少并不改变的数据被数据库调用的次数。DataAdapter通过断开模型来帮助开发人员方便的完成对以上情况的处理。当在一单批次的对数据库的读写操作的持续的改变返回至数据库的时候,DataAdapter 填充(fill)DataSet对象。DataAadapter包含对连接对象以及当对数据库进行读取或者写入的时候自动的打开或者关闭连接的引用。另外,DataAdapter包含对数据的select、insert、update和delete操作的Command对象引用。开发人员将为DataSet中的每一个Table都定义DataAadapter,它将为开发人员照顾所有与数据库的连接。所以开发人员将做的工作是告诉DataAdapter什么时候装载或者写入到数据库。
DataAdapter在数据库和数据集之间移动记录。
五、数据库与应用程序之间的交互路径。