这些年来工作中的开发任务主要集中在用代码处理业务层面,对数据库的操作一直是用的原来项目沿用下来的数据访问层。这次由于要想在项目中使用Dapper.NET,所以系统学习了下ADO.NET,并对知识点做了相应的整理。本篇近限于 ADO.NET 中直接访问数据源的组件的方式,不包括后来的 LINQ 和 Entity Framework。
ADO.NET 的发展历程
ADO.NET 主要是随着 .NET Framework 发布,从 ADO.NET 2.0 开始算的话有以下四个过程:
- .NET Framework 2.0 形成了现有的ADO.NET中直接访问数据源的组件。
- .NET Framework 3.5 新增 SqlClient 对 SQL Server 2008 的支持、 LINQ to DataSet 、 LINQ to SQL 和 Entity Framework。
- .NET Framework 4 对Entity Framework增加了功能。
- .NET Framework 4.5 对SQL Server 的 .NET Framework 数据提供程序新增了功能,同时发布 Entity Framework 5.0。
ADO.NET 中直接访问数据源的组件
ADO.NET中直接访问数据源的组件包含两个部分:.NET Framework 提供的程序和 DataSet。
.NET Framework 提供的程序有4个核心对象:
- Connection:建立与特定数据源的连接。所有 Connection 对象的基类均为 DbConnection 类。
- Command:对数据源执行命令。公开 Parameters,并可在 Transaction 范围内从 Connection 执行。所有 Command 对象的基类均为 DbCommand类。
- DataReader:从数据源中读取只进且只读的数据流。所有 DataReader 对象的基类均为 DbDataReader 类。
- DataAdapter:使用数据源填充 DataSet 并解决更新。所有 DataAdapter 对象的基类均为 DbDataAdapter 类。
DataSet 包含两大块:
- DataTable
- DataRelation
将这两部分连接在一起的是 DataAdapter,DataSet 和 DataTable 用 DataAdapter 的 Fill 方法来填充。
对数据源的操作方法
查询(SELECT)
- 对于单个值,通过 Command 的 ExecuteScalar 方法。
- 对于数据集,有两种方式,一种是通过 DataAdapter 的 Fill 方法来填充 DataSet 或 DataTable;另一种是 通过 Command 的 ExecuteReader 方法返回 DataReader 来检索只读数据流。
不返回任何行的操作(INSERT、UPDATE、DELETE)
- 通过Command的 ExecuteNonQuery。该方法返回受影响行的行数。
- 通过DataAdapter的 UpdateCommand、InsertCommand、DeleteCommand。
对数据库进行修改(CREATE TABLE、CREATE PROCEDURE、DROP TABLE等)
- 通过 Command 的 ExecuteNonQuery 方法。
对操作添加参数
- Command:Command.Parameters.Add 方法
- DataAdapter:DataAdapter.Paramters.Add 方法