internal static void UpdateData(SqlConnection conn, string updateString,DataSet ds) 
{ SqlDataAdapter da = new SqlDataAdapter(); 
da.SelectCommand = new SqlCommand(updateString,conn); 
SqlCommandBuilder cb = new SqlCommandBuilder(da); da.DeleteCommand = cb.GetDeleteCommand(); 
da.InsertCommand = cb.GetInsertCommand(); 
da.UpdateCommand = cb.GetUpdateCommand(); 
//ds.AcceptChanges(); conn.Open(); 
try 

//先添加数据 
da.Update(ds.Tables[0].Select("","",DataViewRowState.Added)); //在更新数据 
da.Update(ds.Tables[0].Select("","",DataViewRowState.ModifiedCurrent)); //最后删除数据 
da.Update(ds.Tables[0].Select("","",DataViewRowState.Deleted)); MessageBox.Show("保存成功!"); 

catch(Exception Err) 

MessageBox.Show(Err.Message,"保存失败!"); } conn.Close(); 这样做怎么老是报“并发冲突:updatecommand影响了0个记录”错误呀? 
请大侠们给予帮忙,十分感谢!!!

解决方案 »

  1.   

    想不通, 为什么要这样更新?
    --------------------------
    da.Update( ds.GetChanges() , ds.Tables[0].TableName );不就OK 了
      

  2.   

    首先谢过!
    如果正常操作没问题的。可是对于多条记录(10条以上),先增加n条后,又从n条中删除几条,再增加几条,保存,执行上述语句,就抱"并发冲突:updatecommand影响了0个记录”错误
      

  3.   

    同意zhongwanli
    把你的三条语句合并就行了。
      

  4.   

    楼上的大哥
    不行呀
    还是报那个错误:如果正常操作没问题的。可是对于多条记录(10条以上),先增加n条后,又从n条中删除几条,再增加几条,保存,执行上述语句,就抱"并发冲突:updatecommand影响了0个记录”错误
      

  5.   

    查查你的删除和添加代码(操作DataSet部分),看看DataRowState的变化是否有问题。
      

  6.   

    对了,你整合到一个da.Update中,再加上Trans试试
      

  7.   

    我也遇到这种错误,我是连续更新时出错,不过已经解决了。对你的情况,应该是在调用UpdateData(SqlConnection conn, string updateString,DataSet ds) 后,调用正在更新的dataset的AcceptChanges();
      

  8.   

    在有级联更新时
    update之后,必须accepchanges()
      

  9.   

    需要accepchanges()
    另外在update的时候最后修改下update的command。
    通过id来update。
      

  10.   

    to:
     yuwen16(rr)另外在update的时候最后修改下update的command。
    通过id来update。中的"id来update",应如何做,能给一些启发的例子吗,不胜感谢!
    另:
    仅仅ds.accepchanges()是不可以的,还会报同样的错误!
      

  11.   

    这里讲个例子,第一次update(ds.Tables[0].Select("","",DataViewRowState.Added)));的时候。
    因为ds并没有acceptechanges()故在ds中标志为DataViewRowState.Added.
    当你第二次再 update(ds.Tables[0].Select("","",DataViewRowState.Added)))的时候。又会把上一次已经add的数据在add一遍,这样就有重复。在ado里面会报错。
    换言之就是最好add一遍以后就调用ds.acceptechanges()方法。利用id来做update也是有原因的。
    id为主键。利用id来做更新操作。可以保证不会产生并发错误。该错误提示也是“并发冲突:updatecommand影响了0个记录”。当然这必然要重写updatecommand。和deletecommand。
    你仔细查看updatecommand的commandtext属性。看看它生成的updatecommand的text就明白为什么会有并发冲突了。所以我觉得比较好的方式是通过执行存储过程来更新。这样让数据库去处理并发的情况。
      

  12.   

    在添加,修改,删除间添加:ds.AcceptChanges();
      

  13.   

    主键自增会存在问题,这样Datatable中主键没有信息
      

  14.   

    up up up up up up up up up up
      

  15.   

    顺序错!  先删除,增加更新.
    //最后删除数据 
    da.Update(ds.Tables[0].Select("","",DataViewRowState.Deleted)); da.Update(ds.Tables[0].Select("","",DataViewRowState.Added)); //在更新数据 
    da.Update(ds.Tables[0].Select("","",DataViewRowState.ModifiedCurrent)); 
      

  16.   

    在存储过程和代码里将自增字段的方向设置为Ouput
      

  17.   

    UpdateCommand 或其他的更新逻辑
    ------------------------------------
    执行的成不成功,完全是根据 @@rowcount:影响的行数
    检查你的UpdateCommand 是不是有这条语句 set nocount on
    有则把它改为set nocount off
      

  18.   

    try
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
      

  19.   

    zhzuo(秋枫) : 
    我看过你写的那个,应用到系统中还是会报这种错误!
      

  20.   

    internal static void UpdateData(SqlConnection conn, string updateString,DataSet ds) 

    string errMsg = null;
    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = new SqlCommand(updateString,conn); 
    SqlCommandBuilder cb = new SqlCommandBuilder(da); try 

    conn.Open(); 
    da.Update(da.Tables[0]);

    catch(Exception e) 

     errMsg = e.Message;

    finally
    {
    conn.Close(); 
    }if(errMsg != null)
    {
      MessageBox.Show(errMsg,"保存失败!"); 
    }
    else
    {
      MessageBox.Show("保存成功!"); 
    }
    }
      

  21.   

    It is a serious problem ,i met it many times ,but now i forget how to solved it . !