DataTable.AcceptChanges & DataAdapter.Update

The AcceptChanges method makes rows status to Unchanged, then the DataAdapter.Update method will think there's no data modification(it will check the rows status in fact, if the status is Unchanged it will do nothing for you), and will not update the data to the database.

So do not use the AcceptChanges method before you call DataAdapter.Update method, only the DataAdapter.Update(DataSet) is enough.

http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/3abaaa25-7b73-47f0-af37-01c89698028e

AcceptChanges方法会将所有改动保存到DataSet或DataTable中,使得所有行的状态都是Unchanged(没有被更改状态)

而DataAdapter.Update方法在保存数据到数据库表时做过一个检查,即检查表行是否被修改过,如果没被修改过,那么更需将不会执行任何命令,直接跳过本行,开始检查下一行,如此,一个表如果行都是Unchanged状态,那么它就不会被更新到数据库中。

所以,在更改了DataSet或DataTable后,若想调用DataAdapter.Update方法直接更新数据到数据库,那么你只需要这个Update方法,无需在此前调用一次AcceptChanges方法了。

 

修改:本文把添加、删除、更新都归纳到修改

 

下午想了3个来小时,就是没有头绪,一直不知道为什么在接受了更改之后,再调用保存方法,就不能把数据保存到数据库中。

晚上去同事家吃饺子,吃了足足23个,聊了一会儿天,11点了,该回家了,离家还有2、3分钟的时候,脑袋里突然又冒出来这个帖子了,怪就怪在这几个小时我们一直没有讨论过技术哎,我竟然冒出点思路来了,结果刚准备掏钥匙开门的时候,哈哈,我彻底想通了,回来一查.net源码,果然是这样,第一次保存更改了行的状态,导致第二次检查没有行需要保存了。

太怪了,这几个小时来一点没有帖子的事儿,一点没讨论过技术,竟然又会突然冒出思路来,并在2、3分钟就搞明白了。 现在想想,唉,我下午那三个小时不工作,先去吃顿饺子多好,也许就不会憋那么久了,呵呵。

你可能感兴趣的:(Datatable)