我想从数据表中删除行状态属性值已删除的所有行。
DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.
目前我正在遍历所有行并删除每一行。
有什么有效的方法吗?我不想在 SQL Server 中删除我想使用 DataTable 方法。
我想从数据表中删除行状态属性值已删除的所有行。
DataTable dt;
dt.Clear(); // this will not set rowstate property to delete.
目前我正在遍历所有行并删除每一行。
有什么有效的方法吗?我不想在 SQL Server 中删除我想使用 DataTable 方法。
我们是这样使用的:
for(int i = table.Rows.Count - 1; i >= 0; i--) {
DataRow row = table.Rows[i];
if ( row.RowState == DataRowState.Deleted ) { table.Rows.RemoveAt(i); }
}
这将满足任何 FK 级联关系,例如“删除”(DataTable.Clear() 不会):
DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
dt.Rows[0].Delete();
}
dt.Rows.Clear();
dt.Columns.Clear(); //warning: All Columns delete
dt.Dispose();
由于您使用的是 SQL Server 数据库,因此我建议您简单地执行 SQL 命令"DELETE FROM " + dt.TableName
。
我会删除表格,这是删除所有内容的最快方法。然后重新创建表。
这是我在搜索这个问题后在自己的代码中确定的解决方案,灵感来自 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。
您可以在 SQL Server 数据库上创建一个存储过程,删除表中的所有行,从 C# 代码执行它,然后重新查询数据表。
我通常执行以下 SQL 命令:
DELETE FROM TABLE WHERE ID>0