从数据集中删除值

时间:2012-06-21 11:03:54

标签: c# dataset

我尝试使用以下代码删除数据集中的数据:

stateflowDataSet dsobject = new stateflowDataSet();
stateflowDataSetTableAdapters.dbo_statetableTableAdapter statetableadapter = new         stateflowDataSetTableAdapters.dbo_statetableTableAdapter();
statetableadapter.Fill(dsobject.dbo_statetable);
dsobject.dbo_statetable.Clear();
statetableadapter.Update(dsobject);

但在使用statetableadapter.Fill(dsobject.dbo_statetable);之后,此行仍然保留。

我清算数据的方式是正确的吗?

代码还有其他问题吗?

2 个答案:

答案 0 :(得分:3)

DataRows删除DataTable并不意味着您将从DBMS中删除它们。事实恰恰相反,即使您之前曾调用DataRow.Delete(),实际上也是在阻止它们被删除。

原因是:{/ 1}}只能删除属于DataRows的{​​{1}}

DataTable

这将使用DataRowState=Deleted删除表格中的每一行。 因此,您需要使用Delete method

DataAdapter.Update(table)

您也可以在一个批处理中更有效率,因此您需要将DataAdapter的UpdateBatchSize设置为0(无限制)。

删除所有行的另一种方法是使用带有CommandText foreach(DataRow row in dsobject.dbo_statetable.Rows) { row.Delete(); } statetableadapter.Update(dsobject.dbo_statetable); 的简单SqlCommand

DELETE FROM Table

现在您需要手动删除(不删除问题的核心)行using(var con = new SqlConnection(ConfigurationSettings.AppSettings["con"])) using(var cmd = new SqlCommand()) { cmd.CommandText = "DELETE FROM Table"; cmd.Connection = con; con.Open(); int numberDeleted = cmd.ExecuteNonQuery(); // all rows deleted } 中的行,因为您还在数据库中手动删除了 / p>

DataTable

答案 1 :(得分:2)

让我尝试重新措辞蒂姆回答一下。当他们受欢迎时我使用了DataSet很多,并且与他们的“魔法”相混淆......

Dataset包含数据库中的数据副本+数据更新,因为数据是从数据库中提取的。

使用您的数据集的Update()上的

DataAdapter方法不是魔术,它会遍历数据集中的表格,而会在表格中扫描行。它会:

    如果行标记为删除,则
  • 使用DeleteCommand
  • 如果行标记为更新
  • ,请使用UpdateCommand

使用Delete()方法删除行时会出现前一种情况,稍后更新行中的某个单元格时会出现这种情况。

如果您观察数据集表中每行的RowState属性,您将了解该过程。