概述
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.OleDbConnection
System.Data.SqlClient.SqlConnection
System.Data.Odbc.Odbc.Connection
System.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 简单介绍,包结构、组成、组成对象的属性与方法以及简单示,后续将根据不同的数据提供程序进行细化。如有不到之处,请多多包涵。