首页 / 教程列表 / C#+ADO.NET数据库入门教程 / ADO.NET五大核心对象

ADO.NET五大核心对象

2358 更新于: 2021-09-27 读完约需 10 分钟

概述

在前面两节中,我们分别学习了《什么是ADO.NET?》《ADO.NET的数据库连接字符串》。对ADO.NET的定义,历史由来以及数据库与.NET应用程序建立连接的连接字符串有了一定的认识。

本节将学习ADO.NET中内置的主要的五大对象,即:Connection, Command, DataAdapter, DataReader, DataSet

自从微软宣布开源.NET源码以后,ADO.NET程序集也一并成了开源项目,具体的源码地址如下:

ADO.NET架构图

以上列出的ADO.NET的五大对象均是抽象概念,这五大对象在不同类型的数据库有不同的实现。在深入学习ADO.NET五大对象之前,先看一张ADO.NET的架构图以了解这五大对象之间的关系:

Connection(连接对象)

使用ADO.NET操作数据库之前,需要建立程序与数据库的连接, Connection对象就是与数据库建立连的,所有Connection对象的基类均为DbConnection抽象类。此外,Connection连接对象也负责管理事务和连接池。使用ADO.NET建立与SQL Server数据库的连接示例代码如下:

// 数据库连接字符串
var connectionString = "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Database=Demo";
// 实例化一个SQL Server的连接对象
SqlConnection connection = new SqlConnection(connectionString);
// 打开与SQL Server数据库的连接
connection.Open();
// 关闭与SQL Server数据库的连接
connection.Close();

特别注意:在使用完打开的数据库连接之后,请将连接关闭以释放连接资源,否则可能导致数据库连接过多引发异常。

除了以上使用connection.Close();方法手动关闭连接外,还可以使用using语句来自动释放连接资源,如:

// 数据库连接字符串
var connectionString = "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Database=Demo";
// 实例化一个SQL Server的连接对象
using (SqlConnection connection = new SqlConnection(connectionString))
{
    // 打开与SQL Server数据库的连接
    connection.Open();
    // 其他业务逻辑代码
}

或者,在C# 8及以上版本,还可使用C#中的using新特性,示例如下:

// 数据库连接字符串
var connectionString = "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Database=Demo";
// 实例化一个SQL Server的连接对象
using SqlConnection connection = new SqlConnection(connectionString);
// 打开与SQL Server数据库的连接
connection.Open();
// 其他业务逻辑代码

// 在connection作用域结束时,将自动释放connection

Command(命令对象)

客户端(应用程序)和数据源之间的每个交互,无论是检索信息、删除记录还是提交更改,都是由Command对象管理的,所有Command对象均继承自DbCommand基类。Command对象提供了用于存储和执行SQL语句和存储过程的方法,以下是Command对象可执行的各种命令:

  • ExecuteReader:将数据以行的形式返回给客户端(.NET应用程序)。通常是SQL查询语句或包含一个或多个查询语句的存储过程。此方法返回一个DataReader对象,该对象可用于填充DataTable对象或直接逐行输出数据等等。
  • ExecuteNonQuery:执行更改数据库中的数据的命令,例如更新(UPDATE)、删除(DELETE)或插入(INSERT)语句,或包含一个或多个这些语句的存储过程。此方法返回一个整数,即受查询影响的行数。
  • ExecuteScalar:此方法只返回单个值,比如SQL Server的内置聚合函数(COUNT,SUM,MIN,MAX,AVG等),字符串函数(LEN,LEFT,RIGHT,CHAR,STUFF等),日期函数(DATEADD,DATEDIFF,DATEPART,DAY,GETDATE,MONTH,YEAR等)的查询结果。

DataReader(数据读取器对象)

DataReader用于检索数据,不能直接实例化一个DataReader的对象,相反地,只能通过调用Command对象的ExecuteReader()方法来获取到DataReader的实例对象。因此,它必须与Command对象一起使用,以执行SQL的SELECT查询语句,然后得到包含返回的行的DataReader对象。

不需要手动打开DataReader对象,相反,当执行Command命令时,它将被自动初始化。

所有DataReader对象的基类均为DbDataReader抽象类,DataReader对象是以只读的、顺向的方式查看其中所存储的数据,DataReader在性能上是非常高效的,同时DataReader对象还是一种非常节省资源的数据对象。

DataAdapter(数据适配器对象)

DataAdapter用于充当数据集(DataSet)与数据源之间用于检索和保存数据的桥梁。DataAdapter使用Fill()方法将数据源检索到的数据填充到DataSetDataTable中,同时可以使用FillSchema()方法检索数据表的架构信息。DataAdapter使用Update()方法对DataSetDataTable所做的任何更改更新回数据源。

DataSet(数据集对象)

DataSet(数据集)是ADO.NET的核心。DataSet本质上是DataTable对象的集合。每个对象依次包含一个DataColumn和DataRow对象的集合。数据集还包含一个关系集合,可用于定义数据表对象之间的关系。

DataSet是驻留于内存中的数据集,可以看做是内存中的数据库,内部用XML来描述数据。

以上五大对象的具体用法和示例,请参考本系列相关文章。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

发表评论

登录用户才能发表评论, 请 登 录 或者 注册