ADO.NET 概述

来源:互联网 发布:翻译软件app 编辑:程序博客网 时间:2024/05/16 02:42

ADO.NET 是一种应用程序与数据源交互的 API,它支持的数据源包括数据库、文本文件、Excel 表格或者 XML 文件等。ADO.NET 封装在 System.Data 命名空间及其子命名空间(System.Data.SqlClient 和 System.Data.OleDb)中,提供了强大的数据访问和处理功能,包括索引、排序、浏览和更新等。

这里写图片描述

上图显示了 ADO.NET 的构架。ADO.NET 构架的两个主要组件是 DataProvider (数据提供程序)和 DataSet (数据集)。

1. DataProvider

DataProvider 提供了 DataSet 和数据库之间的联系,同时也包含存取数据库的一系列接口。通过数据提供者所提供的 API,可以轻松访问各种数据源的数据。
.NET DataProvider 包括四个核心对象:

  • Connection(连接对象):用于与数据源建立连接;
  • Command (命令对象):用于对数据执行指定命令;
  • DataReader(数据读取对象):用于从数据源返回一个仅向前(forward-only)的只读数据源;
  • DataAdapter(数据适配器对象):自动将数据的各种操作做变换到数据源相应的SQL语句。

1.1 Connection 对象

在 ADO.NET 中,Connection (连接对象)用于连接数据库,是应用程序访问和使用数据源数据的桥梁。下面列出了 Connection 的部分常用成员:

  • ConnectionString:连接字符串。
  • Open():打开数据库连接。
  • Close():关闭数据库连接。

使用 Connection 对象连接数据库的一般步骤:

1.定义字符串
连接字符串用来描述数据源的连接方式,不同的数据源使用不同的连接字符串。以 SQL Server 为例,它既支持 SQL Server 身份验证连接方式,也支持 Windows 集成身份验证的连接方式。
其中, SQL Server 身份验证方式的连接字符串的一般格式如下:

string connString = "Data Source = 服务器名;Initial Catalog = 数据库名;User ID = 用户名;Pwd = 密码";

Windows 身份验证的连接字符串的一般格式如下:

string connString = "Data Source = 服务器名;Initial Catalog = 数据库名;Integrated Security = True";

其中,“服务器名”是数据库的服务器名称或 IP 地址。当应用程序和 SQL Server 服务器在同一台计算机上运行时, SQL Server 服务器名是本地服务器,其服务器名可以有以下几种写法:.(圆点)、local、127.0.0.1、本地服务器名称

2.创建 Connection 对象

SqlConnection conn = new SqlConnection(connString);

3.打开与数据库的连接

conn.Open();

4.使用该连接进行数据访问

5.关闭与数据库的连接

conn.Close();

【注意】:不同数据提供者的连接对象及其命令空间是不相同的。以下列出了不同命名空间的 Connection 对象:

  1. System.Data.SqlClient 对应 SqlConnection。
  2. System.Data.OleDb 对应 OleDbConnection。
  3. System.Data.Odbc 对应 OdbcConnection。
  4. System.Data.OracleClient 对应 OracleClientConnection。

1.2 Command 对象

Command(命令对象)用于封装和执行 SQL 命令并从数据源中返回结果,命令对象的 CommandText 属性用来保存最终由数据库管理系统执行的 SQL 语句。注意,不同的数据源需要使用不同的命令对象。下面列出了 Command 的主要成员:

  1. Connection:Connection 对象使用的数据库连接。
  2. CommandText:执行的 SQL 语句。
  3. ExecuteNonQuery():执行不返回行的语句,如 Updata 等,执行后返回受影响的行数。
  4. ExecuteReader():返回 DataReader 对象。
  5. ExecuteScalar():执行查询,并返回查询结果集中的第一行的第一列。

虽然不同数据源的命令对象的名字不同略有不同,但使用方法是相同的,通常按以下步骤访问数据库源:

1.创建数据库连接。
2.定义 SQL 语句。
3.创建 Command 对象,一般形式如下:

SqlCommand comm = new SqlCommand( SQL语句, 数据库连接对象);

也可采用以下形式创建 Command 对象。

SqlCommand comm = new SqlCommand();comm.Connection = 数据库连接对象;comm.CommandText = "SQL语句";

4.执行命令。

【注意】:在执行命令前,必须打开数据库连接,执行命令后,应该关闭数据库连接。

1.3 DataReader 对象

DataReader(数据读取对象)提供一种从数据库只向前读取行的方式。下面列出 DataReader 的主要成员:

  1. HasRows :DataReader 中是否包含一行或多行。
  2. Read():前进到下一行记录,如果下一行有记录,则读出该行并返回 true;否则返回 false。
  3. Close():关闭 DataReader 对象。

使用 DataReader 检索数据的步骤如下:
(1)创建 Command 对象。
(2)调用 Command 对象的 ExecuteReader()方法创建 DataReader 对象。

SqlDataReader dr = Command对象.ExecuteReader();

【注意】:DataReader 类在 .NET Framework 中被定义为抽象类,因此不能直接实例化,只能使用 Command 对象的 ExecuteReader() 方法来创建 DataReader 对象。
(3)调用 DataReader 对象的 Read()方法逐行读取数据。

while(dr.Read()){    // 读取某列数据}

(4)读取某列的数据。
获取某列的值,可以指定列的索引,从0开始,也可以指定列名,一般形式如下:

(数据类型)dr[索引或列名]

【注意】:在执行程序时,DataReader 对象的 Read 方法会自动把所读取的一行数据的各列的值通过装箱操作保存到 DataReader 内部的集合中,因此要想获得某一列的值,就必须进行拆箱操作,即强制类型转换。
(5)关闭 DataReader 对象。

dr.Close();

1.4 DataAdapter 对象

DataAdapter 是 DataSet 和数据源之间的桥接器,用于检索和保存数据。当数据集中的数据发生改变时能够把修改后的数据再次回传到数据源中。

【注意】:在使用不同数据提供程序的 DataAdapter 对象时,对应的命名空间不同。以下列出了不同命名空间的 DataAdapter 对象:

  1. System.Data.SqlClient 对应 SqlDataAdapter 。
  2. System.Data.OleDb 对应 OleDbDataAdapter 。
  3. System.Data.Odbc 对应 OdbcDataAdapter 。
  4. System.Data.OracleClient 对应 OracleClientDataAdapter 。

下面列出了 DataAdapter 的主要成员:

  1. SelectCommand:从数据库检索数据的 Command 对象,该对象封装了 SQL 的 select 语句。
  2. InsertCommand:向数据库插入数据的 Command 对象,该对象封装了 SQL 的 insert 语句。
  3. UpdateCommand:修改数据库中的数据记录的 Command 对象,该对象封装了 SQL 的 update 语句。
  4. DeleteCommand:删除数据库中的数据记录的 Command 对象,该对象封装了 SQL 的 delete 语句。
  5. Fill():向 DataSet 对象填充数据。
  6. Update():将 DataSet 中的数据提交到数据库。

使用 DataAdapter 对象填充数据集时,先使用 Connection 连接数据源,然后使用 Fill()方法填充 DataSet 中的表,一般格式如下:
(1)创建 SqlDataAdapter 对象:

SqlDataAdapter 对象名 = new SqlDataAdapter (SQL 语句, 数据库连接);

(2)填充 DataSet:

DataAdapter 对象.Fill(数据集对象, "数据表名");

2. DataSet

ADO.NET 的核心是 DataSet(数据集)。DataSet可简单的理解成内存中的数据库,是一种“临时的数据库“,只是临时保存从数据源中读出来的数据记录;也是一种”独立的数据库“,它的数据虽然来自数据源,但它一旦生成,应用程序与数据源就断开了数据连接。此时 DataSet 中的数据相当于数据源的数据的一个副本,应用程序与内存中的 DataSet 数据进行交互,在交互期间不需要连接数据源,因此可以极大的加快数据访问和处理速度,同时也节约了资源。

DataSet 保存了从数据源读取的数据信息,以 DataTable 为单位,自动维护表间关系和数据约束。

DataSet 的基本结构如下图所示:

这里写图片描述

数据集的工作原理如下图所示:

这里写图片描述

在使用 DataSet 前必须先创建 DataSet 对象。在创建 DataSet 对象时可以指定一个数据集的名称,如果不指定名称,则默认被设为“NewDataSet”,一般形式如下:

DataSet 数据集对象 = new DataSet("数据集的名称字符串");

3. ADO.NET 访问数据库的一般步骤

这里写图片描述

  • Step1:使用 using 添加 System.Data 及其相关子命名空间的引用(如要想访问 SQL Server 数据库就必须引用 System.Data.SqlCient)。
  • Step2:使用 Connection 对象连接数据源。
  • Step3:视情况使用 Command 对象、DataReader 对象或 DataAdpter对象操作数据库。
  • Step4:将操作结果返回到应用程序中,进行进一步处理。

参考资源:《C# 程序设计经典教程(第二版)》罗福强 杨剑 张敏辉主编 清华大学出版社

0 0