概述
ADO.NET 是 .NET 平台提供访问数据源的组件。用于.NET 应用程序访问关系型和非关系型的数据库。通过使用 ADO.NET 能够方便操作数据库,如查询、新增、更新和删除等操作。
组成
ADO.NET 包含五个主要组件,分别是数据库连接、数据库的命令、数据库的读取器、数据集、数据库的适配器。
ADO.NET 结构图
1、.NET 的数据提供程序:访问数据库。常见的数据提供程序如下表
| 数据提供程序 |
描述 |
| System.Data.SqlClient |
SQL Server 的 .NET 数据提供程序 |
| System.Data.OracleClient |
Oracle 的 .NET 数据提供程序 |
| System.Data.OleDB |
OLE DB 的 .NET 数据提供程序 |
| System.Data.Odbc |
ODBC 的 .NET 数据提供程序 |
| MySql.Data.MySqlClient |
MySql 的 .NET 数据提供程序 |
2、数据库连接(Connection):建立与数据源的连接,Connection 基于 DbConnection 类。
System.Data.OleDb.OleDbConnectionSystem.Data.SqlClient.SqlConnectionSystem.Data.Odbc.Odbc.ConnectionSystem.Data.OracleClient.OracleConnection
| 属性 |
描述 |
| ConnectionString |
用于打开数据库的字符串。 |
| ConnectionTimeout |
等待连接打开数据库所需的时间, 默认为15 秒。 |
| Database |
当前数据库名称或连接打开后要使用的数据库的名称。 |
| State |
连接到当前状态。 |
| 方法 |
描述 |
| Open |
打开数据库连接 |
| Close |
关闭数据库连接 |
| CreateCommand |
创建并返回一个与连接关联数据库的命令(Command)。 |
| BeginTransaction |
开启事务 |
string dbConnectionString = "server=127.0.0.1,1433;Enlist=true;Pooling=true; uid=sa;pwd=pwd123456;connection Timeout=30;database=Hrms;Max Pool Size=600";SqlConnection sqlConnection = new SqlConnection(dbConnectionString);sqlConnection.Open();
3、数据库的命令(Command):对数据库执行命令的基本方法。Command 对象继承于 DbCommand 类。
| 属性 |
描述 |
| Connection |
Connection对象。 |
| ConnectionType |
执行数据库命令的类型,如Text、StoredProcedure。 |
| CommandText |
执行数据库命令语句。 |
| Parameters |
执行数据库命令参数。 |
| 方法 |
描述 |
| ExecuteReader |
执行命令返回 DataReader。 |
| ExecuteNonQuery |
执行命令返回的记录行数。 |
| ExecuteScale |
执行命令返回结果集中的第一行的第一例。 |
SqlCommand sqlCommand = sqlConnection.CreateCommand();sqlCommand.CommandType = System.Data.CommandType.Text;sqlCommand.CommandText = "select * from user";SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
4、数据库的读取器(DataReader):以只读、向前的方式查看数据库表中的数据,读取或操作时,必须保持与数据库的连接。
| 属性 |
描述 |
| FieldCount |
用来获取当前行中的列数。 |
| HasRows |
获取DataReader对象中是否包含行。 |
| 方法 |
描述 |
| Read |
将Reader记录指针移到下一行。 |
| GetValue |
获取当前行指定列的值。 |
| Close |
关闭DataReader对象。 |
| NextResult |
让记录指针指向下一个结果集。 |
| GetValues |
获取当前行的数据保存到一个数组里。 |
| GetDataTypeName |
以列索引获得列的类型。 |
| GetName |
以列索引获得列的名称。 |
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();Console.WriteLine($"|{"编号",-20}|{"名称",20}|");while (sqlDataReader.Read()){ Console.WriteLine($"|{sqlDataReader["userCode"],-20}|{sqlDataReader["userName"],20}|");}
5、数据库的适配器(DataAdapter):用于填充数据集和更新数据库数据。
| 属性 |
描述 |
| SelectCommand |
用于在数据源选择记录的命令。 |
| UpdateCommand |
用于更新数据源中的记录的命令。 |
| InsertCommand |
用于将新记录插入数据源中的命令。 |
| DeleteCommand |
用于从数据源中删除记录的命令。 |
| 方法 |
描述 |
| Fill |
用于命令执行结果填充数据集。 |
| Update |
更新数据源。 |
using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("select * from user", sqlConnection)){ DataSet dataSet = new DataSet(); sqlDataAdapter.Fill(dataSet); DataTable userTable= dataSet.Tables[0];}
6、数据集(DataSet):将从数据库中查询的数据结果缓存到内存中,可对其数据进行管理。
| 属性 |
描述 |
| Tables |
数据集的表集合。 |
| Relations |
链接父表与子表的关系集合。 |
| Prefix |
以数据集命名空间的别名的 XML 前缀。 |
| 方法 |
描述 |
| AcceptChanges |
提交数据集发生改变的数据。 |
| Clear |
移除所有表中的所有行来清除任何数据的 DataSet。 |
| Clone |
复制 DataSet 的结构,但不复制数据。 |
| Copy |
复制该 DataSet 的结构和数据。 |
| CreateDataReader |
为每个 DataTableReader 返回带有一个结果集的 DataTable。 |
| GetChanges |
获取数据集所有更改过的数据。 |
| HasChanges |
获取数据集是否有变改,包括新增行、已删除的行或已修改的行。 |
using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("select * from user", sqlConnection)){ DataSet dataSet = new DataSet(); sqlDataAdapter.Fill(dataSet); DataTable userTable= dataSet.Tables[0];}
小结
以上是 ADO.NET 简单介绍,包结构、组成、组成对象的属性与方法以及简单示,后续将根据不同的数据提供程序进行细化。如有不到之处,请多多包涵。