如果要使用DataAdapter来修改DataSet的子集时,请尽量对父级做修改。

一、概述
    由于DataSet是一个强关联性组件,并且开发历史悠久,难免很多使用习惯与现在不同,并且也存在不少的Bug。在此,就DataSet的更改问题,做一个提醒式的说明。

二、问题原因
    1.DataSet是一个强关联性的组件,它与外部的DataGridView、BindingNavigator和数据库等有着密切的联系,而且自身下面的子集,包括DataTable、DataRow、Cell等等,又有着密切的联系。因此,在更改它时,很容易引发问题。
    2.由于DataSet设计年代久远,并且其自身的结构非常复杂,因此,自身容易存在较多bug。并且,微软很多新产品,比如WCF,要对其进行完美支持,也是很难做到,事实上也是没有做到,从而导致很多问题。

三、问题表现例子
    1.WCF不能直接传输DataSet的子集。比如WCF传输DataTable时,有时会发现,DataTable里的数据没有被传递过去。
    2.当使用DataAdapter,进行Update DataRow时,在事件RowUpdated中,如果对参数e.Row进行修改,则会发现,e.Row确实能被修改,但从其父级来访问这个row,发现该row的数据依然没有被更改。

四.解决方案
    1.如果需要对DataSet的子集进行修改,则尽量修改父级,或者从父级入手来进行修改。比如,DataAdapter.Update(dataTable),最好改为:DataAdapter.Update(DataSet, "TableName")。
    2.尽量减少对DataSet以及子集的数据类型转换,防止变量的引用,被转换为值类型的复制。比如上文中的问题表现例子2。e.Row可能就是一个复制出来的值类型。

如果有任何问题,请加QQ群 68328977 来进行讨论。

 

posted on 2013-01-08 15:53  xxxteam  阅读(308)  评论(0编辑  收藏  举报

导航