如何从数据表中删除所有行



我想删除数据表中所有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之后递增。

相关内容

  • 没有找到相关文章

最新更新