琢磨了一天用SqlCommandBuilder进行批量更新,有一些新的认识

以往做数据管理,一般都尽量避免做批量更新。原因很简单,因为浏览器是无模式的,要保存其状态,系统开销挺大,而且程序也会变的复杂。

然而,在实际项目开发中,却经常要面对这个难题,很多用户更愿意像修改一张表格或一个文档那样,把所有的工作完成后再做一个保存(提交)。也就是说,批量更新应该能够给用户带来更好的体验。今天,抽出一天的时间,仔细琢磨了一下批量更新,虽说进展不大,但还是有一些新的认识,这里记录下来。

虽然很多开发者对GridView的性能表示担心,不过我还是喜欢采用这个控件的,毕竟功能太强大了。要更新的数据首先绑定到一个GridView上显示出来,对于要更改的内容是用模板列来绑定的,其中部置一个文本框之类。如果要删除一行或添加一行时,我先将网格上原有的数据保存到一个DataTable中,当然这个DataTable的结构和数据库中的表是一致的。然后,将要删除或添加的数据在DataTable中做出处理(删除或添加)。最后把DataTable重新绑定到GridView上。批量更新时,我从数据库表中把原有数据都删除,然后遍历GridView的行,依次重新写入数据到表中。

这种方法比较容易控制,主要问题就是更新时不管三七二十一,将所有记录重写,显得有些太笨了些。另外,也采用过对更改过的记录做标记的方式,在更新时根据标记进行判断,完成不同的操作,但总觉得太麻烦。

其实也知道ado.net提供了自动更新的方法,但总是心存畏惧,一直竟没有采用过。其实也不是很复杂,创建一个SqlCommandBuilder对象,并指定它的适配器对象(SqlDataAdapter),再利用适配器(SqlDataAdapter)的Update方法,更新相应的数据集DataSet就行了。使用的关键就是DataSet对象。首先需要获取要更新的DataSet对象,接下来就是对这个数据集进行处理了(删除、更新、添加),更新还好说,难点也就集中在删除和添加上,因为它们要求改变数据集的数量,加之每一次处理都会因为保存状态而做大量的数据缓存工作。今天弄了一天,也没发现一个简单完美的办法,总感觉处理过程比较复杂,回滚时会消耗较多的资源。

总以为一定会有一种简洁的办法 但一时真又找不出来,待明天用于项目中,看看能不能灵机一动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值