日期:2014-05-18  浏览次数:20718 次

删除记录时出现并发错误,很奇怪的问题
有a,b,c,d这4个表,其中a是b的父表,b是c的父表,c是d的父表,这4个表都分别绑定到了4个grid,他们的数据源都是父表的bingdingsource,datamember是关系,对4个表进行插入、更新操作都正常,但是当在d表中删除一个记录保存后没有错,当再次添加该纪录后保存后还是没有错,但是再次删除该记录就出现了并发错误,deletecommand影响了预期1条纪录中的0条,但是数据库中该纪录确实是存在的阿,手工写代码删除是正确的,但使用dataadapter.update(datatable)就出错,为什么?

------解决方案--------------------
是否重新更新了dataset,你删除了,但插入到数据是不是没有更新dataadapter里面所以删除出错,重新查询填充再删除
------解决方案--------------------
最后删除之前,记录是真实存在数据库中的,但是删除就报错是吗?那报错后数据库中实际上是删除了没有?
------解决方案--------------------
当你第一次删除d的一条记录时,其对应的DataRow(r1)被标记为Deleted,但并未从DataSet的Rows集合中移除,
再次添加该纪录后,DataSet的Rows集合中就会创建一条新记录(r2),并且r1的每个field值于r2的每个field值相等,
再次删除该记录就出现了并发错误,那是因为r2也被标记为Deleted,又由于r1和r2的每个field值相等,这就会造成DataAdapter对数据库的一条记录执行两次删除操作,所以要引发并发错误。

解决方法:1 每次调用DataAdapter的Update方法后重新填充DataSet;2 当你第一次删除记录调用DataAdapter的Update方法后并手工删除r1(可以调用DataSet.Rows.Remove方法),因为是手工操作,处理不方便,不推荐你使用此方法。
------解决方案--------------------
你都是通过dataadapter.update来更新数据库的吧,在更新使用dataadapter.update(datatable);更新完后,

记的调用datatable.AcceptChanges()方法来完成内存中的更新。不然就可能会出现你的问题
------解决方案--------------------
我也使用DataSet做项目,还没遇到此类问题...

我开始麻木了...
------解决方案--------------------
Up
------解决方案--------------------
up
------解决方案--------------------
学习........