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

| 我想从数据表中删除具有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 Server数据库,因此我主张仅执行SQL命令“ 4”。
我将删除该表,这是删除所有内容的最快方法。然后重新创建表。
您可以在SQL Server db上创建一个存储过程,该存储过程将删除表中的所有行,从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递增。
我通常执行以下SQL命令:
DELETE FROM TABLE WHERE ID>0

要回复问题请先登录注册