删除数据表中的所有行

时间:2009-06-05 11:30:09

标签: ado.net

我需要删除数据表(ADO.net)中的所有行。我不想在这里使用Foreach。

在一个单一内容中如何删除所有行。

然后我需要将数据表更新为数据库。

注意:我已经尝试过dataset.tables [0] .rows.clear和dataset.clear但两个都无法正常工作

另外我不想使用sql delete查询。

如果您能够提供答案,请发布除此之外的其他内容。

6 个答案:

答案 0 :(得分:6)

'foreach'也不是这个问题的简单答案 - 你遇到的问题是枚举器不再对更改的集合有效。

这里的麻烦是,对于DataRowState.Added与Unchanged或Modified中的行,Delete()行为是不同的。如果你删除()一个添加的行,它只是从集合中删除它,因为无论如何数据存储大概都不会知道它。对未更改的行或已修改的行上的Delete()只是将其标记为已删除,与其他人指示的一样。

所以我最终实现了这样的扩展方法来处理删除所有行。如果有人有更好的解决方案,那就太棒了。

    public static void DeleteAllRows(this DataTable table)
    {
        int idx = 0;
        while (idx < table.Rows.Count)
        {
            int curCount = table.Rows.Count;
            table.Rows[idx].Delete();
            if (curCount == table.Rows.Count) idx++;
        }
    }

答案 1 :(得分:4)

我将在此处重新发布我的评论,以防您想要关闭此问题,因为我不相信可以“批量删除”DataTable中的所有行:

  

删除之间有区别   来自DataTable的行并删除   他们。删除标记为已删除   这样当您对您的更改应用更改时   数据库,实际的db行是   删除。删除它们(使用Clear())   只是将它们从内存中取出来   数据表。

您必须遍历行并逐个删除它们。它只有几行代码。

答案 2 :(得分:2)

这有效。

            for (int i = dtParts.Rows.Count - 1; i >= 0; i--)
                dtParts.Rows[i].Delete();

答案 3 :(得分:2)

这适用于lambda表达式:
但在这里你必须使用前面的Lambda。
幸运的是,你在这里有一行从datatable删除你的东西:)

myTable.AsEnumerable().ToList().ForEach(m => m.Delete());

答案 4 :(得分:0)

2*np.pi

为我工作

答案 5 :(得分:-2)

DataTable=Datatable.Clone;

应该这样做。这将复制表结构,但不复制数据。 (Datatable.Copy会这样做)