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

时间:2018-03-22 21:59:18

标签: c# tsql datatable

我正在做一个C#Windows窗体应用程序,它从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万行。 当我.Load()然后.WriteToServer(做一个新实例)时,我尝试加载文件前200000并且工作正常到DataTable并在基于总行的分区循环的每次迭代时强制GC调用,但只有2-3次。在第四次加载时,它就会停止。它不是关于记忆的,因为我一直在控制它。我尝试了很多东西。一些截图:

First iteration

Second iteration (check the arrow)

非帮助消息让我做恶梦并且不让我看到异常甚至调试代码:

The message

任何帮助将不胜感激。非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

好吧,它似乎是一个Visual Studio错误。它发生在WinForms应用程序中,并不重要。该应用程序刚刚停止,但您可以再次恢复它,它可以正常工作。

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