3

我想从数据表中删除行状态属性值已删除的所有行。

DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.

目前我正在遍历所有行并删除每一行。

有什么有效的方法吗?我不想在 SQL Server 中删除我想使用 DataTable 方法。


4

8 回答 8

5

我们是这样使用的:

for(int i = table.Rows.Count - 1; i >= 0; i--) {
    DataRow row = table.Rows[i];
    if ( row.RowState == DataRowState.Deleted ) { table.Rows.RemoveAt(i); }
}
于 2011-04-19T12:04:29.673 回答
3

这将满足任何 FK 级联关系,例如“删除”(DataTable.Clear() 不会):

DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
     dt.Rows[0].Delete();
}
于 2012-01-20T17:00:53.760 回答
2
dt.Rows.Clear();
dt.Columns.Clear();   //warning: All Columns delete
dt.Dispose();
于 2015-08-20T14:02:14.133 回答
0

由于您使用的是 SQL Server 数据库,因此我建议您简单地执行 SQL 命令"DELETE FROM " + dt.TableName

于 2011-04-19T13:14:30.600 回答
0

我会删除表格,这是删除所有内容的最快方法。然后重新创建表。

于 2011-04-19T14:31:47.123 回答
0

这是我在搜索这个问题后在自己的代码中确定的解决方案,灵感来自 Jorge 的回答。

DataTable RemoveRowsTable = ...;
int i=0;
//Remove All
while (i < RemoveRowsTable.Rows.Count)
{
     DataRow currentRow = RemoveRowsTable.Rows[i];
     if (currentRow.RowState != DataRowState.Deleted)
     {
         currentRow.Delete();
     }
     else
     {
         i++;
     }
}

这样,您可以确保所有行都被删除,或者将它们的 DataRowState 设置为 Deleted。

此外,由于在枚举时修改集合,您不会得到 InvalidOperationException,因为foreach未使用。但是,Jorge 的解决方案易受攻击的无限循环错误在这里不是问题,因为代码将递增超过 DataRow,其 DataRowState 已设置为 Deleted。

于 2012-03-26T16:46:10.383 回答
0

您可以在 SQL Server 数据库上创建一个存储过程,删除表中的所有行,从 C# 代码执行它,然后重新查询数据表。

于 2011-04-19T15:04:23.290 回答
0

我通常执行以下 SQL 命令:

DELETE FROM TABLE WHERE ID>0
于 2011-04-21T09:36:00.803 回答