ADO.NET基础
前言
ADO.NET是微软公司提供的一款数据库访问技术,是在.NET Framework中负责数据访问的类库集。它提供了一系列的方法支持对Microsoft SQL Server和XML等数据源进行访问。可以将ADO.NET比喻为数据库应用程序和数据员之间的桥梁。它提供了一个面向对象的数据访问架构。
可以在数据源完全断开链接的情况下,对数据进行更新修改,再将数据的更新情况返回至数据源。从而减少了由于数据库链接过多而引起服务器资源被占用的情况。
ADO.NET支持多层应用程序的开发,在多层体系架构中相邻层之间需要传递数据,ADO.NET针对此场景的解决方案为使用XML格式表示内存数据,也称为数据集。然后将数据以XML格式进行发送
XML格式是一种通用格式,可以被多种数据结构接受并可穿越防火墙。
因此ADO.NET就具有了跨平台和良好的交互性。
文章目录
一、ADO.NET体系
1.ADO.NET体系结构
在ADO.NET中,用于访问和操作数据库的两个主要组件是.NET Framework数据提供程序和数据集DataSet
(1).NET Framework数据提供程序
.NET Framework数据提供程序是专为数据操作设计的组件,用于处理不同的数据源。支持访问特定数据库,执行SQL命令和检索结果。
在.NET中主要提供了三类数据提供程序
.NETFramework数据提供程序 | 说明 |
---|---|
SQL Server .NET Framework数据 | 提供对Microsoft SQL Server中的数据访问,使用System.Data.SqlClient命名空间 |
OLE DB .NET Framework数据提供程序 | 提供对使用OLE DB公开的数据源(如:Access、Excel等)中数据的访问,使用System.Data.oleDb 命名空间 |
ODBC .NET Framework数据提供程序 | 提供对使用ODBC公开的数据源中数据的访问,使用System.Data.Odbc命名空间 |
.NET Framework数据提供程序包含了四个核心对象
对象 | 说明 |
---|---|
Connection | 建立与特定数据源的连接 |
Command | 对数据源执行命令 |
DataReader | 从数据源中读取只进只读的数据流 |
DataAdapter | 使用数据源填充DataSet并支持更新 |
(2)数据集DataSet
DataSet是专为独立与所有数据源的数据访问而设计的。它在支持ADO.NET的断开式,分布式数据方案中其至关重要的作用。
DataSet包含一个或多个DataTable对象的集合。DataTable对象由数据行和数据列以及数据的主外键、约束和关系信息组成。如下图所示:
也可以将DataSet视作为一个临时数据库,而DataTable可以视作是临时数据库中的临时表。一个数据库中可以有很多个表,这也就对应了DataSet数据集包含一个或多个DataTable,而DataTable由数据行、列以及数据主外键。约束和关系信息组成这个定义。
2.ADO.NET操作方式
ADO.NET有两种操作数据库的方式
- 非断开式访问
- 断开式访问
非断开式访问在整个操作过程中需要保持数据库链接
而断开式访问只需在执行数据库命令时保持数据库链接,命令执行完毕后将查询到的数据缓存至内存,此时断开数据库连接,在内存中获取数据即可。
ADO.NET访问数据库流程如下图所示:
(1)非断开式访问流程
需使用Connection对象、Command对象以及DataReader对象进行数据库交互操作
- 对数据库数据进行更改,例如Insert、Delete、Update或执行聚合函数命令等,操作流程如下:
1.创建数据库对象Connection并打开连接
2.创建命令对象Command
3.执行相应SQL命令
4.关闭数据库链接
流程图如下:
- 对数据库进行查询操作流程如下:
1.创建Connection对象并打开数据库链接
2.创建命令对象
3.执行SQL命令的查询命令Select并创建DataReader对象
4.使用while循环读取DataReader对象中的数据
5.关闭DataReader对象
6.关闭数据库链接
流程图如下:
(2)断开式访问流程
需使用Connection对象、DataAdapter对象以及DataSet对象进行数据库交互操作
操作流程如下:
1.创建数据库连接对象Connection
2.创建数据适配对象DataAdapter,指定Select命令和Connection对象。
3.创建数据集DataSet对象,用于在内存中缓存数据
4.使用DataAdapter对象将查询到的数据填充至DataSet数据集中
5.更新DataSet中的数据
6.使用DataAdapter对象将DataSet对象中的数据回传至数据库中
流程图如下
3.ADO.NET操作数据库原理
由上图所示,上图中是一个简易的抽水装置,整体结构实现的需求就是将下游的水抽到上游的水池中进行存储
将.NET数据提供对象带入至上图中的结构流程的话:
数据源即使图中的水源,是整体结构不可或缺的对象。如果没有水源,那么整体结构都会失去效用无法运转
图中的抽水口,则对应了.NET数据提供对象中的Connection对象,只有它与水保持接触连接,其他对象才可以抽到水,也就是正常运转
.NET数据提供对象中的Command对象,则与上图中的抽水机类似,它为抽水提供动力和执行方法,将水提供至上面的输水管。也就是说Command在程序中为整体数据交互提供动力,也就是执行SQL命令。
而DataAdapter对象和DataReader对象类似于图中的输水管,担任着水的传输任务。DataAdapter对象,是通过发动机的动力,将抽上来的水送至水池中进行缓存,在程序中就是通过SQL命令将执行的结果输送至DataSet数据集中进行缓存。
DataReader对象与DataAdapter对象不同,它不将水输送至水池,而是直接单向将水输送至需要用水的人手里。所以DataReader比DataAdapter的速度更快
池中进行缓存,在程序中就是通过SQL命令将执行的结果输送至DataSet数据集中进行缓存。
DataReader对象与DataAdapter对象不同,它不将水输送至水池,而是直接单向将水输送至需要用水的人手里。所以DataReader比DataAdapter的速度更快
DataSet对象,则是上图中的水池,从水源抽上来的水全部存储在水池中,即使将抽水装置停掉,但抽上来的水依旧在水池中存储着,依旧可以保持水的供应