callYourDataSet.AcceptChanges();after you callDataAdapter1.Update(YourDataSet);

解决方案 »

  1.   

    DataSet的AcceptChanges()方法
    提交在DataSet对象载入之后或上次调用AcceptChanges()方法之后对DataSet对象的所有更改
      

  2.   


    真的这么简单吗?我就是调用了AcceptChanges不行才来问的啊?我同时打开两个IE,对同一数据进行修改,结果总是最后修改的那个,它应该是有并发冲突的啊?ASP.NET是无状态的,它怎么知道原来的DataSet的情况呢?每次都要Load进新的数据,无法和以前的进行比较啊?是不是要自己写代码处理?
      

  3.   

    seeTackle Data Concurrency Exceptions Using the DataSet Object
    http://msdn.microsoft.com/msdnmag/issues/03/04/DataConcurrency/default.aspx
      

  4.   

    ~~~~
    AcceptChanges是不应该调用的。
    AcceptChanges后调用DataAdapter.Update,那么所有数据都不会执行更新到数据库中..
      

  5.   


    TO : saucer(思归) 这个我看过了,它是Win32的程序,我说的是ASP.NET程序,无状态的。ADO.NET 是不是会自动去比较原来DataSet和数据库的值?如果是ASP.NET,它拿什么去比,要自己写代码保存吗?我想不用吧?
      

  6.   

    >>>我同时打开两个IE,对同一数据进行修改,结果总是最后修改的那个,它应该是有并发冲突的啊?这俩浏览器是同一个SESSION么?那篇文章里告诉你了用了CommandBuilder情形下并发冲突怎么发生的1. A获取了数据库里的数据
    2. B获取了数据库里的数据
    3. A更新数据
    4. B更新数据-->并发冲突,因为CommandBuilder建立的更新语句在WHERE里用了原来数据里的值>>>ASP.NET是无状态的,它怎么知道原来的DataSet的情况呢?把你目前正在修改的数据放在DataSet/Session变量里
      

  7.   


    看样子要自己些代码来判断了,Web上的并发(DataGrid,SqlDataAdapter)比起Win32程序(DataGrid,SqlDataAdapter)的并发不一样,Win32那个DataGrid很好用,因为SqlDataAdapter状态能保留,所以它自己能抛出并发错误。Web上的DataGrid,SqlDataAdapter就不一样了,SqlDataAdapter状态不能保存,自己写Session来保存也不行啊,要整个逻辑都自己处理了,唉,难道真的这么烦吗?
      

  8.   


    终于知道了,用Update(Session("dtValue"))是可以的。但问题来了:1.Session是会超时的。2.把Dataset的信息存放在Session中,用户多了,服务器受不了啊!3.如果用ViewState,大量数据往返于客户端和服务器,也不理想!
      

  9.   

    if you are worrying about resources but don't mind querying the database from time to time, just keep the single record you are editing in the Session/ViewState variable