1.当Dataset中的行先标识为DataRowState.Deleted,是否在AcceptChanges之前还可以进行修改。如果能修改,修改后的状态应如何?当使用DataApadter.update(dataset)语句时,会怎样更新数据源的数据呢。
2.当Dataset中的行先标识为DataRowState.modified,是否在AcceptChanges之前还可以进行删除。如果能删除,是不是会忽略之前修改的内容。当使用DataApadter.update(dataset)语句时,会怎样更新数据源的数据呢。请各位大侠指点迷津!!!

解决方案 »

  1.   

    如果行被删除了,你只能获取它的值,不能再次修改了如果是已修改的行,是可以删除的更新的时候会根据行状态,产生不同的sql语句insert、delete、update
      

  2.   

    总之千万别认为AcceptChanges是类似中文的“我确认修改了”这种意思。你在DataSet里改也好,增也好,删也好,AcceptChanges()的结果就是把这一切增/删/改的标志全部清零!就好像他们原来就没进行过什么修改。也就是说AccpetChanges()之后再Update(),那就会被认为实际上没什么可更新到数据库。
      

  3.   

    总之千万别认为AcceptChanges是类似中文的“我确认修改了”这种意思。你在DataSet里改也好,增也好,删也好,AcceptChanges()的结果就是把这一切增/删/改的标志全部清零!就好像他们原来就没进行过什么修改。也就是说AccpetChanges()之后再Update(),那就会被认为实际上没什么可更新到数据库。二楼所说的“不要把AcceptChanges认为是我确认修改了”,个人认为应该是针对数据源,而不是针对Dataset,因为执行AcceptChanges后,Dataset中的数据确实被修改了。同时所有标志全部清零。当然再执行Update(),结果没有可用的数据更新到数据库。
      

  4.   

    其实SqlDataAdapter.Update()执行完后也会自动调用AcceptChanges()的。这么说吧,我个人认为AcceptChanges()在绝大多数情况下都用不到,或者说你没必要关心它(就比如DataAdapter.Update()会自动调用它一样)。
      

  5.   

    我们公司做的电镀设备监控程序就是分开来处理的,界面显示的很多数据是从PLC实时读取过来的,放在Dataset里面,但里面有些数据需要更新回数据库,所以界面用Dataset.AcceptChanges的同步显示,这样的速度会快。而在需要更新数据库的数据时,则直接用OLEDBCOMMAND来执行插入,更新,删除等数据操作的,用DataAdapter.Update性能会受到影响。
      

  6.   


    你这样有可能会造成DataSet的更改丢失(提交不到数据库里面去,因为Dataset.AcceptChanges将行状态变为NoChanged了)
    实时更新就直接读取并显示就好了,没必要Dataset.AcceptChanges,你可以将提交数据的操作放在另外一个线程中来做(如果关心是否提交成功,可以用回调通知UI主线程)
      

  7.   

    不会呀,提交数据库我用的是OLEDBCOMMAND先执行的,然后调用DataSet.AcceptChanges只是确认Dataset的更改而已。不用DATAAPADTER.UPDATE(DATASET)来提交数据库。