DataRow.Delete()

wangjingjing390 2003-04-22 08:08:10
各位好,我在代码中找到了一条DataRow,执行了
DataRow.Delete();
DataSet.AcceptChanges();
DataAdapter.Update(...);
这几条语句后,发现数据并没有从数据库中删除掉
只好依靠DataAdapter.DeleteCommand.ExcuteNonquery()来删除
可是好多C#书上的例子都是这么删数据的
请大家指教一下我上面的代码为什么删不了数据
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aviscool 2003-04-22
  • 打赏
  • 举报
回复
DataSet.AcceptChanges();这句话将DataRow的状态改变为Unchanged,
所以使用DataAdapter.Update(...)这句话更新DataSet的时候,认为所有的记录都没有变化,自然不会更新了。因此去掉DataSet.AcceptChanges();就可以了,何况DataAdapter.Update(...)也会在更新结束后执行AcceptChanges()操作
collbull 2003-04-22
  • 打赏
  • 举报
回复
netpot说的很对,
你把Ds1.AcceptChanges()可以不要,因为用了 sqlDataAdapter1直接更新的话,
系统会自动调用 AcceptChanges(),所以不用显示的调用,
如果要用sqlCommand 更新就要显示的调用,
即使要调用也应该放在 sqlDataAdapter1.Update(Ds1); 后面。
wangjingjing390 2003-04-22
  • 打赏
  • 举报
回复
回班门斧:
CurrencyManager cm;
cm=(CurrencyManager)dataGrid1.BindingContext[dataGrid1.DataSource];
DataRowView drv;
drv =(DataRowView)cm.Current;
DataRow myDataRow = drv.Row;
myDataRow.Delete();
Ds1.AcceptChanges();
sqlDataAdapter1.Update(Ds1);
netpot 2003-04-22
  • 打赏
  • 举报
回复
Adapter在执行update的时候是根据DataRow的RowState来决定如何对数据源进行更新的
执行DataRow.Delete(),RowState变成了deleted,那么执行update就会对数据源进行相应的删除操作。如果RowState为modified执行更新,是Adder(new Row)执行添加。
而若执行delete后进行AcceptChanges,那么所以的dataRow的RowState都变成了unchanged,那么就不会对数据源进行任何更新。
另外当执行了Adapter 的Update后,会自动调用AcceptChange方法的
erictang2003 2003-04-22
  • 打赏
  • 举报
回复
试试
SqlCommandBuilder commandBuilder = new SqlCommandBuilder( dataAdapter );//重要!

DataRow.Delete();

DataAdapter.Update(...);

DataSet.AcceptChanges();// 放到最后!
TheAres 2003-04-22
  • 打赏
  • 举报
回复
你给举一个例子吧。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧