代码如下:代码1:
this.dataSet11.book[0].Delete();
this.dataSet11.book.AcceptChanges();
this.sqlDataAdapter1.Update(this.dataSet11);代码2:
this.dataSet11.book.Rows.RemoveAt(0);
this.sqlDataAdapter1.Update(this.dataSet11);每执行一次删除代码,要删除的行就会出现在尾行,不能在数据库中真正删除

解决方案 »

  1.   

    直接使用SQL语句"DELETE  tableName where 条件"进行删除,this.sqlDataAdapter1.Update(this.dataSet11);执行的是此对象的UpdateCommand命令对象中的CommandText属性中的SQL语句,所以你要先设置好this.sqlDataAdapter1.UpdateCommand.CommandText这个属性,然后执行即可
      

  2.   

    BindingManagerBase bm = dataGrid1 .BindingContext[dataGrid1.DataSource, dataGrid1.DataMember];
    if (bm.Count <= 0 || bm.Position == -1) return;
    DataRow dr = ((DataRowView)bm.Current).Row;
    dr.Delete(); this.sqlDataAdapter1.Update(this.dataSet11);我是这样删除datagrid 选中行的数据的
      

  3.   

    this.dataSet11.book[0].Delete();
    this.dataSet11.book.AcceptChanges();
    this.sqlDataAdapter1.Update(this.dataSet11);
    修改成
    this.dataSet11.book[0].Delete();
    this.sqlDataAdapter1.Update(this.dataSet11);
    this.dataSet11.book.AcceptChanges();代码2肯定更新不了,因为通过RemoveAt或Remove方法后,
    被移除行不是做行状态为DataRowState.Deleted,
    而是直接删除,所以进行批更新不会成功,
    具体看,
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
      

  4.   

    楼上说的不错,其实dataadapter.update() 方法正是通过DataRowState的状态来判断是否对数据库进行更新, 而AcceptChanges() 方法将使你做的数据集操作接受更改,将影响DataRowState的枚举值,使adapter不进行更新操作
      

  5.   

    RemoveAt()只是将内存中的dataset进行了删除
    而update()只删除rowstate为deleted的行,更新到数据源
    this.dataSet11.book[0].Delete();是用来改变行状态的
    AcceptChanges()是对更新操作的确认
      

  6.   

    RemoveAt()只是将内存中的dataset进行了删除
    update()只删除rowstate为deleted的行,更新到数据源this.dataSet11.book[0].Delete();是用来改变行状态的为deleted
    AcceptChanges()是对内存中dataset进行更新,使其状态为unchanged