ADO.NET2.0(3)----DataAdapter篇

 一、DataAdapter原理 

       可以用Command对象和DataReader对象来执行查询,并检查结果。

        那如果想要把执行查询所得到的结果存储在一个DataSet对象中,我们该怎么办?

       ADO.NET2.0 给我们提供了DataAdapter对象来解决这个问题,DataAdapter类是ADO.net对象模型中联机和脱机这两部分之间的桥梁。可以能过DataAdapter对象来将取得的结果存储在DataSet中。

       DataSet本身是与数据库没有作何关系的,它可以存储任何形式的数据。所以可以看出,DataAdapter设计的目的在于,为处理脱机数据提供支持。

       DataAdapter是专门为处理脱机数据而设计的。

       DataAdapter的结构:

      

      

       在使用DataAdapter时,你会发现,建立的连接(connection)并不需要打开连接(open),那么这是为什么?

      因为DataAdapter在通过Fill方法填充DataSet中的Table时,自动会打开一个连接,并且在Fill方法后,会自动关闭(Close)这个连接。

     另外,DataAdapter本身与DataSet之间也没有任何连接。

     同时,DataAdapter中包含有用于向数据库回递存储在DataSet中的改动的更新逻辑。

     那么,DataAdapter是怎样将数据填充到DataSet中的DataTable中的呢?其实,DataAdapter还是利用了DataReader。例如:

     DataSet ds = new DataSet();

     DataTable tbl = ds.Tables.Add("Customers");      //在DataSet中建立一个Customers表

     OleDbCommand cmd = new OleDbCommand();

    OleDbDataReader rdr = cmd.ExecuteReader();

     DataRow row;               //定义DataRow

    while ( rdr.Read())

    {

         row = tbl.NewRow();      //在dataset中的Customers表中添加一行

         row ["CustomerID"]  = rdr ["CustomerID"];  //赋值

         tbl.Rows.Add(row);     //添加到Customer表中

   }

    rdr.Close();

  从这同这段代码,就可以看到DataAdapter实际上还是利用了DataReder类,来实现了对DataTable的填充。

  实现的过程是这样的:new 一个DataAdapter对象 --------> DataAdapter利用自己的SelectCommand来生成

 一个DataReader------------>利用DataReader填充DataSet中的DataTable。

  DataTable是数据的一个副本。