ADO.NET
定义:
ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类。 ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件。
这篇博客会简单介绍ADO.NET的以下几个对象:
- Connection对象
- Command对象
- DataReader对象
- DataAdapter对象
- DataSet对象
一、Connection对象
Connection对象用于与数据源进行连接,所有Connection对象的基类都是DbConnection。
DbConnection有以下几个派生类(后面用SqlConnection进行代码演示):
- EntityConnection
- OdbcConnection
- OledbConnection
- OracleConnection
- SqlConncetion
Connection有两个重要的属性:
- ConnectionString : 连接数据库的字符串;
- State : 表示Connection的状态,其有Open和Close两种状态。
Connection有两个重要的方法:
- Open : 打开数据库(在调用Open方法后,State的值会变为Open)
- Close : 关闭数据库(在调用Close方法后,State的值会变为Close)
注意:在使用完数据库连接对象后,一定要对其进行关闭,使用Close方法或使用using关键字对对象进行引用,在使用完毕后进行自动释放。
以下代码创建了一个SqlConnection对象,并完成了打开和关闭数据连接的操作。
二、Command对象
表示要对数据源执行的 SQL 语句或存储过程。 为表示命令的、数据库特有的类提供一个基类。
DbCommand同样有几个派生类,与DbConnection对应:
-
- EntityCommand
- OdbcCommand
- OledbCommand
- OracleCommand
- SqlCommand
Command有三个重要的属性:
-
- CommandText : 执行命令或存储过程名称
- Connection : 连接数据库的对象
- CommandType : CommandText的类型
- Text表示CommandText为普通命令文本
- StoredProcedure表示CommandText为存储过程
- TableDirect只有OledbCommand才能使用,表示CommandText为要访问的表名
Command有三个重要的方法:
-
- ExecuteNonQuery : 执行Command,返回受影响的行数
- ExecuteReader : 执行Command,返回DataReader对象(DataReader为只读流,后面会介绍)
- ExecuteScalar : 执行Command,返回结果集的第一行第一列的值
三、DataReader对象
从数据源读取行的一个只进流。
DataReader同样有相同的几个派生类:
- EntityDataReader
- OdbcDataReader
- OledbDataReader
- OracleDataReader
- SqlDataReader
DataReader存在期间,其Connection必须保持打开,这样做的优点在于读取速度快,缺点在于会占用数据库连接,并且因为DataReader是一个只进只读流,是不能看之前的数据的。
可以通过调用其Read方法,前进到下一条数据,当Read方法返回false时,表示数据已经读取到最后一条。
注意:在使用DataReader期间,不能断开Connection的连接。
四、DataAdapter对象
表示用于填充 DataSet和更新数据库的一组数据命令和一个数据库连接。
DataAdapter也有相同的几个派生类:
-
- EntityDataAdapter
- OdbcDataAdapter
- OledbDataAdapter
- OracleDataAdapter
- SqlDataAdapter
之前介绍的DataReader可以获取执行数据库命令返回的结果集, 但由于在使用DataReader期间,不能断开Connection连接,如果在获取结果集后,需要做大量复杂的操作或需要不断的使用前面和后面的某些数据时,DataReader就会显得乏力,所以就有DataAdapter来弥补这个缺点。
DataAdapter在进行实例化的时候, 可以选择传入一个Command对象或传入CommandText和ConnectionText进行初始化,在执行CommandText的时候,并不是让Command去直接执行, 而是使用DataAdapter的Fill方法,执行命令并将结果集填充到DataTable或DataSet(下面会进行说明)。
在使用DataAdapter时,因为它是将结果集填充到DataTable或DataSet中,所以在使用返回的结果集时,并不需要让Connection持续连接,而且DataTable和DataSet是可以反复读取的。
五、DataSet对象
表示一个存放于内存中的数据缓存。
上面介绍的DataAdapter,在执行的时候,可以将数据集填充到DataSet中。
DataSet中有很多表,可以通过Tables索引器来获取其包含的表,一般执行DataAdapter时,数据都会填充到DataSet的第一个表中,所以可以直接通过dataAdapter.Tables[0]来获取返回的结果集。