DataTable.Load()时应用程序中断,问题出在哪里?

3
我正在编写一个C# Windows Forms应用程序,该应用程序从API下载文件,解压缩这些文件并将它们解析到数据库中。我的问题出现在解析部分。其他关于“应用程序处于断点模式”的线程并没有明确解释为什么会使用.Load()会出现此问题。
我执行一个Openrowset查询来读取数据库中的文件。它可以很好地读取所有信息。然后我使用dataTable.Load()加载该查询的结果。然而,该库内部抛出了异常,导致应用程序停止运行。我无法获得异常信息。以下是代码的主要部分(因为实际查询太长,所以我使用这个作为示例):
private DataTable dataTable;
    public void loadDataTable()
    {
        dataTable = new DataTable();
        dataTableConsumo.Load(queryExecutor.ExecuteReader("SELECT * FROM Prices", connection));
    }

    public SqlDataReader ExecuteReader(String query, SqlConnection connection)
    {
        SqlCommand comando = new SqlCommand(query, connection);
        comando.CommandTimeout = 0;
        return comando.ExecuteReader();
    }

CSV文件非常大,有1700万行数据。我试过加载前20万行,使用.Load().WriteToServer方法(每次迭代时强制进行GC调用,并基于总行数的分区循环创建新的DataTable实例),并且只试了2-3次,这样是可以正常工作的。但在第四次加载时,它就停止了。而且这不是因为内存问题,因为我一直在控制。我尝试了很多方法,但都没什么效果。以下是一些截图:
第一次迭代: First iteration 第二次迭代(注意箭头): Second iteration (check the arrow) 然而,给我的提示消息却无济于事,让我感到非常糟糕,无法查看异常或者调试代码: The message 希望能得到帮助,非常感谢您的时间。
1个回答

0

好的,看起来这是一个Visual Studio的bug。它发生在WinForms应用程序中,但并不是关键问题。应用程序只是停止了,但您可以恢复它,然后它就能正常工作。

如果您将WinForms应用程序移植到自动化控制台应用程序中,则永远不会发生这种情况。问题部分解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接