从 DataSet 中删除一行不会影响数据库

Deleting a row from DataSet doesn't affect the database

我是 ADO.NET 的新手,我试图了解断开连接的模型,我编写了一个代码来使用 SqlDataAdapterSqlCommandBuilder 进行插入更新和删除,它使用插入和更新但不使用删除,这是为什么?如何解决?。

这是我在事件处理程序中的代码,我有一个 table "client" 有 3 列 id、name、city,我的数据集称为 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");

如果删除该行,Update 方法将无法发现删除了哪一行。您需要使用删除方法

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

当你调用Delete方法时,删除行的RowState 属性变为DataRowState.Deleted但它仍然存在于数据集。因此,当您调用更新时,该方法现在能够搜索 RowStateDataRowState.Unchanged 不同的所有行,并且对数据库执行适当的操作 table