C# 从数据集中删除行不会影响数据库

C# 从数据集中删除行不会影响数据库,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我是ADO.NET的新手,我试图理解断开连接的模型,我编写了一个代码,使用SqlDataAdapter和SqlCommandBuilder执行inset更新和删除,它使用insert和update,但不使用delete,这是为什么?以及如何修复它 这是我在事件处理程序中的代码,我有一个表客户机,它有3列id、name、city和名为ds的数据集 SqlDataAdapter ad = new SqlDataAdapter("select * from client", cnx);

我是ADO.NET的新手,我试图理解断开连接的模型,我编写了一个代码,使用SqlDataAdapter和SqlCommandBuilder执行inset更新和删除,它使用insert和update,但不使用delete,这是为什么?以及如何修复它

这是我在事件处理程序中的代码,我有一个表客户机,它有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");

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

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

调用Delete方法时,已删除行的属性将更改为DataRowState.deleted,但它仍存在于数据集中。因此,当您调用更新时,该方法现在可以搜索RowState与DataRowState不同的所有行。如果您删除该行,则更新方法无法发现已删除的行。您需要使用Delete方法

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

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