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

发布于 2024-11-02 06:42:21 字数 228 浏览 5 评论 0原文

我想从数据表中删除 rowstate 属性值已删除的所有行。

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

目前我正在迭代所有行并删除每一行。

有什么有效的办法吗? 我不想在 SQL Server 中删除我想使用 DataTable 方法。


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.


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

小嗷兮 2024-11-09 06:42:21

我们正在使用这种方式:

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

We are using this way:

for(int i = table.Rows.Count - 1; i >= 0; i--) {
    DataRow row = table.Rows[i];
    if ( row.RowState == DataRowState.Deleted ) { table.Rows.RemoveAt(i); }
}
谎言 2024-11-09 06:42:21

这将满足任何 FK 级联关系,例如“删除”(DataTable.Clear() 不会):

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

This will satisfy any FK cascade relationships, like 'delete' (that DataTable.Clear() will not):

DataTable dt = ...;
// Remove all
while(dt.Count > 0)
{
     dt.Rows[0].Delete();
}
一场信仰旅途 2024-11-09 06:42:21
dt.Rows.Clear();
dt.Columns.Clear();   //warning: All Columns delete
dt.Dispose();
dt.Rows.Clear();
dt.Columns.Clear();   //warning: All Columns delete
dt.Dispose();
森林迷了鹿 2024-11-09 06:42:21

我通常执行以下 SQL 命令:

DELETE FROM TABLE WHERE ID>0

I typically execute the following SQL command:

DELETE FROM TABLE WHERE ID>0
鸠书 2024-11-09 06:42:21

由于您使用的是 SQL Server 数据库,我建议只需执行 SQL 命令"DELETE FROM " + dt.TableName

Since you're using an SQL Server database, I would advocate simply executing the SQL command "DELETE FROM " + dt.TableName.

烏雲後面有陽光 2024-11-09 06:42:21

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

I would drop the table, fastest way to delete everything. Then recreate the table.

想你的星星会说话 2024-11-09 06:42:21

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

You could create a stored procedure on the SQL Server db that deletes all the rows in the table, execute it from your C# code, then requery the datatable.

浅唱々樱花落 2024-11-09 06:42:21

这是我在搜索这个问题后在自己的代码中确定的解决方案,并从 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 设置为已删除。

此外,您不会因在枚举时修改集合而收到 InvalidOperationException,因为未使用 foreach。然而,Jorge 的解决方案容易受到的无限循环错误在这里并不是问题,因为代码将增量超过其 DataRowState 已设置为已删除的 DataRow。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文