【问题标题】:collection was modified enumeration operation might not execute while working with datatable and dataset集合已修改枚举操作在使用数据表和数据集时可能无法执行
【发布时间】:2021-05-16 03:38:19
【问题描述】:

我正在尝试从某个文件路径获取一个 excel 文件,并将该数据集与另一个数据集合并。现在我有这个。但我不断收到错误: collection was modified enumeration operation might not execute。我希望有人能帮助我。提前致谢

                    FileStream stream = File.Open("MyFilePath", FileMode.Open, FileAccess.Read);
                    IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
                    DataSet resultReader = excelReader.AsDataSet();
                    excelReader.Close();

                    DataTable excelTable = resultReader.Tables[0];

                    foreach (DataRow dr in excelTable.Rows)
                    {
                        dr.Table.Rows.Add();
                        excelTable.AcceptChanges();
                    }

                    resultReader.Tables.Add(excelTable);

                    ds.Merge(resultReader);
``

【问题讨论】:

    标签: c# datatable dataset


    【解决方案1】:

    对于表中的每一行,您都在同一个表中添加一个额外的空行...为什么?因为:

    dr.Table.Rows == excelTable.Rows
    

    正如错误所述,您正在更新您正在枚举的内容,而您(几乎在所有情况下)都无法这样做。

    假设这是您真正的意思(我觉得这很可疑),您可以使用 for 循环获得类似的结果:

    var len = excelTable.Rows.Count;
    for (var i = 0; i < len; ++i)
        excelTable.Rows.Add();
    

    或者正如 cmets 指出的那样,您可以使用ToList 创建一个副本,然后可以枚举:

    foreach (DataRow dr in excelTable.AsEnumerable().ToList()) {
       dr.Table.Rows.Add();
    } 
    

    【讨论】:

    • 谢谢,只是附加部分是空的。你知道我要做什么吗?
    猜你喜欢
    • 2013-03-05
    • 2011-07-22
    • 2015-06-17
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2011-10-05
    相关资源
    最近更新 更多