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有两个重要的属性:

    1. ConnectionString : 连接数据库的字符串;
    2. State : 表示Connection的状态,其有Open和Close两种状态。

  Connection有两个重要的方法:

    1. Open : 打开数据库(在调用Open方法后,State的值会变为Open)
    2. 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]来获取返回的结果集。

原文地址:https://www.cnblogs.com/hourglasser/p/3407327.html