2、如果楼主你的SqlDataAdapter是在界面拖进去的,你可设置UpdateCommand的CommandText属性,把比较记录是否改动的部分删掉,如下表(tblEntity,有两个字段:Entity_Id,Entity_Name,其中,Entity_Id为主键),系统生成的代码如下: UPDATE [tblentity] SET [Entity_Id] = @Entity_Id, [Entity_Name] = @Entity_Name WHERE (([Entity_Id] = @Original_Entity_Id) AND ((@IsNull_Entity_Name = 1 AND [Entity_Name] IS NULL) OR ([Entity_Name] = @Original_Entity_Name))); SELECT Entity_Id, Entity_Name FROM tblEntity WHERE (Entity_Id = @Entity_Id) 删掉检验部分后,变成:UPDATE tblEntity SET Entity_Id = @Entity_Id, Entity_Name = @Entity_Name WHERE (Entity_Id = @Entity_Id); SELECT Entity_Id, Entity_Name FROM tblEntity WHERE (Entity_Id = @Entity_Id) 这样改动之后,更新时就不会楼主之前碰到的并发错误问题。当然,在代码里写SqlDataAdapter的参数也行。 3、通过Command.ExecuteNonQuery()来执行更新修改,就是不用DataAdapter.Update方法,而是通过枚举DataSet一条一条记录进行更新,这样也不会出现并发错误,而且可以更灵活地控制。
在操作数据的时候首先判断该标志位是否发生变化~
只是答案不夠理想啊
如果我把數據寫顯示在DataGridView中,修改后再更新回數據源,各位的方法能不能應付過來?
如果在DataGridView中編輯後更新到數據源時
如查某一行被其他人編輯過,那這一行是更新不了的
如果ContinueUpdateOnError設為false,那整個GRID中的數據都不能更新到數據源
此時有沒有辦法得到是哪些行已經被編輯過?
这样确实会产生并行性错误,其实是DataAdapter自己的控制,它在更新每一笔记录之前,会检查那笔记录是否已更改过,如果改动过,就会弹出并发错误.具体楼主自己看DataAdapter生成的Update字符串便知道.解决方法有几种:
1、向上面网友说的,在数据库里记录哪些记录已更改过,但需要在更新前判断。2、手动写DataAdapter的Update字符串,Where后只检查主键。3、通过Command.ExecuteNonQuery()来执行更新修改。
不過所說的第2、3點不是很明白:
2.手动写DataAdapter的Update字符串:是不是要為GRID中的每一條記錄都下UPDate語句?
3.通过Command.ExecuteNonQuery()来执行更新修改:這點跟我說的問題如何聯系?
謝謝了!
UPDATE [tblentity] SET [Entity_Id] = @Entity_Id, [Entity_Name] = @Entity_Name WHERE (([Entity_Id] = @Original_Entity_Id) AND ((@IsNull_Entity_Name = 1 AND [Entity_Name] IS NULL) OR ([Entity_Name] = @Original_Entity_Name)));
SELECT Entity_Id, Entity_Name FROM tblEntity WHERE (Entity_Id = @Entity_Id)
删掉检验部分后,变成:UPDATE tblEntity
SET Entity_Id = @Entity_Id, Entity_Name = @Entity_Name
WHERE (Entity_Id = @Entity_Id);
SELECT Entity_Id, Entity_Name FROM tblEntity WHERE (Entity_Id = @Entity_Id)
这样改动之后,更新时就不会楼主之前碰到的并发错误问题。当然,在代码里写SqlDataAdapter的参数也行。
3、通过Command.ExecuteNonQuery()来执行更新修改,就是不用DataAdapter.Update方法,而是通过枚举DataSet一条一条记录进行更新,这样也不会出现并发错误,而且可以更灵活地控制。