天天看点

数据库访问技术(二)---ADO.NET

ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问数据。之所以使用ADO.NET名称,是因为Microsoft希望表明,这是在NET编程环境中优先使用的数据访问接口。

  • 外文名
  • ActiveX Data Objects
  • 发布单位
  • 微软公司
  • 分    类
  • 数据访问接口
  • 特    点
  • 平台互用性

简介

编辑

ado.net可让开发人员以一致的方式存取资料来源(例如 SQL Server 与 XML),以及透过 OLE DB 和 ODBC 所公开的资料来源。资料共用的消费者应用程序可使用ado.net 来连接至这些资料来源,并且撷取、处理及更新其中所含的资料。

ado.net可将资料管理的资料存取分成不连续的元件,这些元件可分开使用,也可串联使用ado.net也包含

.NET Framework 资料提供者,以用于连接资料库、执行命令和撷取结果。这些结果会直接处理、放入ado.net DataSet

物件中以便利用机器操作 (Ad Hoc)的方式公开给使用者、与多个来源的资料结合,或在各层之间进行传递。DataSet 物件也可以与.NET

Framework 资料提供者分开使用,以便管理应用程序本机的资料或来自 XML 的资料。

ado.net类别 (Class) 位于 System.Data.dll 中,而且会与 System.Xml.dll 中的XML 类别整合。

ado.net可为撰写 Managed

程式码的开发人员提供类似于ActiveX Data Objects (ADO)提供给原生元件物件模型 (Component Object

Model,COM)开发人员的功能。建议使用ado.net而非ADO来存取.NET 应用程序中的资料。

ADO .NET会提供最直接的方法,让开发人员在 .NET Framework 中进行资料存取。

隐私权声明:

System.Data.dll、System.Data.Design.dll、System.Data.OracleClient.dll、System.Data.SqlXml.dll、System.Data.Linq.dll、System.Data.SqlServerCe.dll

和 System.Data.DataSetExtensions.dll

组件无法区分使用者的私用资料与非私用资料。这些组件不会收集、储存或传输任何使用者的私用资料。不过,协力厂商应用程序可能会使用这些组件来收集、存储或传输使用者的私用资料。

发展

1998年起,因为Web应用程序的窜起,大大改变了许多应用程序的设计方式,传统的数据库连线保存设计法无法适用于此类应用程序,这让ADO应用程序遇到了很大的瓶颈,也让微软开始思考让资料集(Resultset,在ADO中称为Recordset)能够离线化的能力,以及能在用户端创建一个小型数据库的概念,这个概念就是ado.net中离线型资料模型

(disconnected data model) 的基础,而在ADO的使用情形来看,数据库连线以及资源耗用的情形较严重(像是

Server-side cursor 或是 Recordset.Open

会保持连线状态),在ado.net中也改良了这些物件,构成了能够减少数据库连线和资源使用量的功能。XML的使用也是这个版本的重要发展之一。2000年,微软的Microsoft

.NET计划开始成形,许多的微软产品都冠上.NET的标签,ADO+也不例外,改名为ado.net并包装到.NET

Framework类别库中,成为.NET平台中唯一的资料存取元件。[1] 

架构

传统的资料处理主要是依赖相互连接的双层式模型。随着资料处理朝多层次架构发展,程式设计人员也逐渐改用中断连接的方式,使应用程序更具延展性(Scalability)。

ADO .NET3.0 中用于存取和管理资料的两个主要元件是 .NET Framework 资料提供者和 DataSet。

资料提供者

.NET Framework

资料提供者是一种明确设计用于管理资料以及快速存取顺向只读资料的元件。Connection 物件会提供资料来源的连接。Command

物件可让开发人员存取资料库命令,以便传回资料、修改资料、执行预存程序 (Stored

Procedure),并且传送或撷取参数资讯。DataReader 则可提供来自资料来源的高效能资料流。最后,DataAdapter 会提供

DataSet 物件与资料来源之间的桥接器 (Bridge)。DataAdapter 会使用 Command 物件与资料来源处执行 SQL

命令,以便将资料载入 DataSet,并且将 DataSet 内的资料变更调节回资料来源。

DataSet

ado.net DataSet

的设计已明确指出它可独立于任何资料来源外而存取资料。因此,它可与多个不同的资料里来源搭配使用、与 XML

资料搭配使用,或用于管理应用程序的本机资料。DataSet 包含一或多个由资料列和资料行所组成的 DataTable 物件集合,以及

DataTable 物件中的主索引键、外部索引键、条件约束 (Constraint) 及资料的相关资讯。

数据库访问技术(二)---ADO.NET

ADO.NET 架构

右图说明 .NET Framework 资料提供者与 DataSet 之间的关联性。

作用

它提供了平台互用性和可伸缩的数据访问,ADO

.NET增强了对非连接编程模式的支持,并支持RICH

XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO

.NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。

ado.net是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。

ado.net允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过NET的ADO

.NET类库来进行连接。

ado.net提供与数据源进行交互的相关的公共方法,但是对于不同的数据源采用一组不同的类库。这些类库称为Data Providers,并且通常是以与之交互的协议和数据源的类型来命名的。[2] 

ado.net是与数据源交互的.NET技术。有许多的Data

Providers,它将允许与不同的数据源交流――取决于它们所使用的协议或者数据库。然而无论使用什么样的Data

Provider,开发人员将使用相似的对象与数据源进行交互。SqlConnection对象管理与数据源的连接。SqlCommand对象允许开发人员与数据源交流并发送命令给它。为了对进行快速的只“向前”地读取数据,使用SqlDataReader。如果想使用断开数据,使用DataSet并实现能进行读取或者写入数据源的SqlDataAdapter。[3] 

类库

Connection 类

和数据库交互,必须连接它。连接帮助指明数据库服务器、数据库名字、用户名、密码,和连接数据库所需要的其它参数。Connection对象会被Command对象使用,这样就能够知道是在哪个数据源上面执行命令。

与数据库交互的过程意味着必须指明想要执行的操作。这是依靠Command对象执行的。开发人员使用Command对象来发送SQL语句给数据库。Command对象使用Connection对象来指出与哪个数据源进行连接。开发人员能够单独使用Command对象来直接执行命令,或者将一个Command对象的引用传递给DataAdapter,它保存了一组能够操作下面描述的一组数据的命令。[3] 

Command对象

成功与数据建立连接后,就可以用Command对象来执行查询、修改、插入、删除等命令;Command对象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入数据可用ExecuteNonQuery()方法来执行插入命令。[3] 

DataReader类

许多数据操作要求开发人员只是读取一串数据。DataReader对象允许开发人员获得从Command对象的SELECT语句得到的结果。考虑性能的因素,从DataReader返回的数据都是快速的且只是“向前”的数据流。这意味着开发人员只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果开发人员需要操作数据,更好的办法是使用DataSet。[3] 

DataSet对象

DataSet对象是数据在内存中的表示形式。它包括多个DataTable对象,而DataTable包含列和行,就象一个普通的数据库中的表。开发人员甚至能够定义表之间的关系来创建主从关系(parent-child

relationships)。DataSet是在特定的场景下使用――帮助管理内存中的数据并支持对数据的断开操作的。DataSet是被所有Data

Providers使用的对象,因此它并不像Data Provider一样需要特别的前缀。[3] 

DataAdapter类

某些时候开发人员使用的数据主要是只读的,并且开发人员很少需要将其改变至底层的数据源。同样一些情况要求在内存中缓存数据,以此来减少并不改变的数据被数据库调用的次数。DataAdapter通过断开模型来帮助开发人员方便的完成对以上情况的处理。当在一单批次的对数据库的读写操作的持续的改变返回至数据库的时候,DataAdapter

填充(fill)DataSet对象。DataAadapter包含对连接对象以及当对数据库进行读取或者写入的时候自动的打开或者关闭连接的引用。另外,DataAdapter包含对数据的SELECT、INSERT、UPDATE和DELETE操作的Command对象引用。开发人员将为DataSet中的每一个Table都定义DataAadapter,它将为开发人员照顾所有与数据库的连接。所以开发人员将做的工作是告诉DataAdapter什么时候装载或者写入到数据库。[3] 

DataTable类

DataTable 是一个数据网格控件。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。

DataTable的实例化以及添加列:

DataTable dt = new DataTable();

dt.Columns.Add("ID");

dt.Columns.Add("Name");

DataRow dr = dt.NewRow();

object[] objs = { 1, "Name" };

dr.ItemArray = objs;

dt.Rows.Add(dr);

this.dataGridView1.DataSource = dt;[3]