首页 > 解决方案 > 从 DataSet 中删除一行不会影响数据库

问题描述

我是新手,ADO.NET我正在尝试理解断开连接的模型,我编写了一个代码来使用SqlDataAdapterand进行插入更新和删除SqlCommandBuilder,它适用于插入和更新,但不适用于删除,为什么会这样?,以及如何修复它?.

这是我在事件处理程序中的代码,我有一个表“客户端”,它有 3 列 id、name、city 和我的 DataSet Called ds。

SqlDataAdapter ad = new SqlDataAdapter("select * from client", cnx);       
foreach (DataRow client in ds.Tables["client"].Rows)
{
    if (client.Field<int>(0) == 100)
    {
        ds.Tables["client"].Rows.Remove(client);
        break;
    }
}
new SqlCommandBuilder(ad);
ad.Update(ds, "client");

标签: c#sql-serverado.net

解决方案


如果删除该行,Update 方法将无法发现已删除的行。您需要使用 Delete 方法

foreach (DataRow client in ds.Tables["client"].Rows)
{
  if (client.Field<int>(0) == 100)
  {
      client.Delete();
      break;
  }
}

当您调用 Delete 方法时,已删除行的RowState属性更改为DataRowState.Deleted,但它仍存在于 DataSet 中。因此,当您调用 Update 时,该方法现在能够搜索具有不同于DataRowState.Unchanged的​​ RowState的所有行,并对数据库表执行适当的操作


推荐阅读