SQL Server 如何删除数据表中的所有行

lqfhib0f  于 2022-12-10  发布在  其他
关注(0)|答案(8)|浏览(315)

I want to delete all rows from datatable with rowstate property value Deleted.

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

Currently I am iterating through all rows and deleting each row.
Is there any efficient way? I don't want to delete in SQL Server I want to use DataTable method.

p4rjhz4m

p4rjhz4m1#

我们采用的是这样一种方式:

for(int i = table.Rows.Count - 1; i >= 0; i--) {
    DataRow row = table.Rows[i];
    if ( row.RowState == DataRowState.Deleted ) { table.Rows.RemoveAt(i); }
}
iovurdzv

iovurdzv2#

这将满足任何FK级联关系,如'delete'(即DataTable.Clear()不会):

DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
     dt.Rows[0].Delete();
}
20jt8wwn

20jt8wwn3#

dt.Rows.Clear();
dt.Columns.Clear();   //warning: All Columns delete
dt.Dispose();
wribegjk

wribegjk4#

我通常执行以下SQL命令:

DELETE FROM TABLE WHERE ID>0
eaf3rand

eaf3rand5#

因为您使用的是SQL Server数据库,所以我建议您只执行SQL命令"DELETE FROM " + dt.TableName

sg3maiej

sg3maiej6#

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

jvidinwx

jvidinwx7#

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

oxf4rvwz

oxf4rvwz8#

Here is the solution that I settled on in my own code after searching for this question, taking inspiration from Jorge's answer.

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++;
     }
}

This way, you ensure all rows either get deleted, or have their DataRowState set to Deleted.
Also, you won't get the InvalidOperationException due to modifying a collection while enumerating, because foreach isn't used. However, the infinite loop bug that Jorge's solution is vulnerable to isn't a problem here because the code will increment past a DataRow whose DataRowState has already been set to Deleted.

相关问题