dataset 对象与datasetcommand 对象合作的基本原理
dataset 对象可以让我们群组以其管理datatable 对象,我们可以把它看成是暂时存放资料的地方,它本身并不具备和数据源联机以及操作数据源的能力。如果想要将数据源的数据取回并存放在dataset 里面的datatable 中,要透过数据操作组件才办的到。数据操作组件(managedprovider)就是connection、command、datasetcommand 以及datareader 对象,其中dataset对象和datasetcommand 对象的关系最密切,因为datasetcommand 对象是帮助dataset 对象和数据源沟通的桥梁;我们透过datasetcommand 对象来取得数据源的数据时,它会帮我们先依照数据在数据源中的架构产生一个datatable 对象,然后将数据源中的数据取回后填入datarow 对象,再将datarow 对象填加入datatable 的rows 集合,直到数据源中的数据取完为止。datasetcommand 对象将数据源中的数据取出,并将这些数据都填入自己所产生的datatable 对象后,立即将这个datatable 对象加入dataset 对象的datatables 集合,并结束和数据源的联机。datasetcommand 对象的执行流程如下图所示:

我们来详细了解数据操作组件的实际动作:首先由connection 建立和数据源的联机,然后由datasetcommand 对象透过command 对象下达将数据取回的命令。这些命令透过connection对象送至数据源后,数据源会将我们所要取得的数据透过connection 对象传回给datasetcommand,datasetcommand 将这些数据填入自己产生的datatable 对象。全部的数据取回后,再把这个由datasetcommand 对象所产生的datatable 对象,加入dataset 中的datatables 集合对象来统一管理。dataset 对象从到尾都没有主动和数据源有任何互动,这些命令的下达以及数据的传递都是透过数据操作组件而完成的;如下图所示:
