首先用數據集 ds 填充GridView. 
然後對GridView數據行做新增,修改,刪除操作,之後對所作的編輯一起存入數據庫
現在遇到這樣的問題了,
由於我在 調用數據填充到ds 至 保存GridView所作的編輯  這段時間內...有其它用戶修改過數據
這樣.ds 就從數據表中找不到原始的資料數據.就提交不了我現在的想法是..  
在保存之前,再聲明一個sqldataAdapert,然後用新的sqldataAdapert.update(ds.GetChanges())
注意:保存的是變更ds的復寫不知道這樣行不行.....高人們指教下..或提點更好的意見還有一點:批量保存數據就衹能update(dataset) 和 用循環一條條的保存嘛????

解决方案 »

  1.   

    在保存之前,再聲明一個sqldataAdapert,然後用新的sqldataAdapert.update(ds.GetChanges()) 
    不知道這樣行不行.....高人們指教下..或提點更好的意見 
    ==
    肯定不行,如果你的数据在数据库里已经被修改,这条数据是不能提交成功的
    還有一點:批量保存數據就衹能update(dataset) 和 用循環一條條的保存嘛???? 
    ==
    就ADO.NET本身的功能,应该只能这样了
      

  2.   

    楼主有空你可以了解一下数据库中关于"乐观锁"和"悲观锁"的知识。Adapter使用的是“乐观锁”,它默认产生的SQL语句(insert into,update,delete)执行时会判断,原始值是否已经被修改,若被修改过,便不会更新。这是有必要的。
    你可以通过Adapter.ContinueUpdateOnError = false;来屏蔽掉错误,这样未改动过的记录可正常更新回数据库,而改动过的记录不变。若坚持使用Adapter.Update更新,你也可以手动修改相关命令(UpdateCommand,InsertCommand,DeleteCommand),去掉where中关于“Original_字段"的判断。
      

  3.   

    只是稍微说下自己的经验
    操作数据库的时候,最好能把相关表锁定,这样应该会最大程度上的避免出现并发问题,但是感觉处理过于粗暴了。。
    还有就是,Adapter.Update()我原来测试过,只能更新数据源是单个表的情况,如果,数据源是多个表内/外连接的,好像就不能正确执行了。我是一条一条循环更新/插入/删除的,不知道有没有高手给个思路。一直想换个方法,但是没有什么好思路