【问题标题】:SQL Query to Excel in C#在 C# 中对 Excel 进行 SQL 查询
【发布时间】:2013-12-03 22:02:23
【问题描述】:

我一直在努力解决这个问题。我正在编写一个程序来处理存储在 SQL 数据库中的服务器上的大量数据。一个包含 50 列的表中有数百万条记录。

我的程序做的第一件事是执行一个查询来检索一组这些数据。集合大小的范围可以从 500 条记录到 150 万条记录。 150 万是非常罕见的,但它可能会发生。目前我正在检索数据并将其存储在 DataTable 中,然后使用 EPPlus 将其导出到 excel。我开始用完大约 150,000 条记录的内存。完成整个任务大约需要 2-3 分钟。我相信我在填充 DataTable 时内存不足。

数据在 SQL 数据库中的服务器上,我们必须有一个导出的 excel 文件到我们的本地机器。必须继续满足这些标准。

我到底该怎么做呢?

编辑:这是一些示例代码。我还应该更新我不关心格式。

string query = "SELECT * FROM DB.dbo.Table WHERE [Client Name] = '" + clientName + "'";
System.Data.DataTable dt = new System.Data.DataTable();
using (SqlConnection sqlConn = new SqlConnection(connString))
{
     using (SqlCommand cmd = new SqlCommand(query, sqlConn))
{
     sqlConn.Open();
     using (SqlDataReader myReader = cmd.ExecuteReader())
     {
           dt.Load(myReader);
           sqlConn.Close();
     }
}
}

我认为我需要在更大的情况下进行调整。正如你们中的许多人所说,不可能处理如此多的行。我将从整体上看另一种解决问题的方法。谢谢大家的帮助!

【问题讨论】:

  • Excel 电子表格有行数限制。 Excel 2003 为 65k,2010 为 1meg.. 不确定其他人。
  • 不可能将超过 100 万条记录导出到 Excel。这是 Excel 在单个工作簿中允许的最多记录。
  • 您能否包含一些代码,以便我们查看您当前在做什么?

标签: c# sql sql-server excel epplus


【解决方案1】:

DataTable 显然在这里没有帮助。您可以在没有 DataTable 的情况下直接使用 StramWriter 并直接写入 CSV 文件而不是 Excel 文件(您的问题并未表明您需要公式、格式等)。

此外,将自己置于最终用户的位置也会有所帮助。用户可能会在处理 100 万行的 excel 文件时发现问题。

【讨论】:

  • 我想我会试试这个,因为我不关心公式或格式。谢谢
【解决方案2】:

首先,您已经在使用SqlDataReader。这意味着用于逐个记录的处理。如果你创建一个

while (reader.Read())
{
   // Export row
}

循环,你不应该遇到内存问题 - 但是它可能很慢。

在上面的// Export row 部分中,您可能希望使用 ADO 写入 Excel 工作表,这基本上归结为打开与 SQL 文件的数据库连接和INSERTing,就像您将插入到普通数据库中一样. SO上应该有代码向您展示如何执行此操作(例如this one)。

[关于我将如何做的旁注:

我会在我的应用程序资源中创建一个 Excel 模板文件。然后,我会将其保存到磁盘以在每次导出时创建一个新文件,然后构造一个连接字符串来访问该新文件。然后我会使用普通的OleDbCommands 插入。

]

但是,正如其他人已经指出的那样,1.5 mio 行并不是 Excel 可以处理的数据量。

【讨论】:

    【解决方案3】:

    如果您要为每个单元格或每一行设置值和格式,这将需要时间。

    您应该始终使用 set_range("A1:A50") = 字符串数组。您可以创建一个包含 50 个字符串的字符串数组并使用 set_range();

    我不知道 EPPlus 的处理,如果您创建大量对象来设置您的 DataTable 而没有处理它,它将抛出内存问题,因为这些可能不是 CLR 对象。

    您可以尝试使用多个表格来写入数据以提高用户的可读性。

    欲了解更多信息export sql DataTable to excel

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多