我想删除数据表中所有rowstate属性值为Deleted的行。
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级联关系,如'delete' (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命令:
DELETE FROM TABLE WHERE ID>0
由于您使用的是SQL Server数据库,我建议您直接执行SQL命令"DELETE FROM " + dt.TableName
。
我会删除表,最快的方式来删除一切。然后重新创建表
您可以在SQL Server数据库上创建一个存储过程,删除表中的所有行,从c#代码中执行它,然后重新查询数据表
在搜索了这个问题之后,我从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的解决方案容易受到的无限循环错误在这里不是问题,因为代码将在DataRowState已经被设置为Deleted的DataRow之后递增。