Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中Excel的SQL查询#_C#_Sql_Sql Server_Excel_Epplus - Fatal编程技术网

C# C语言中Excel的SQL查询#

C# C语言中Excel的SQL查询#,c#,sql,sql-server,excel,epplus,C#,Sql,Sql Server,Excel,Epplus,我一直在努力解决这个问题。我正在编写一个程序来处理SQL数据库中服务器上的大量数据。一个包含50列的表中有数百万条记录 我的程序要做的第一件事是执行查询来检索一组数据。设置的大小可以从500条记录到150万条。150万是相当罕见的,但这是可能发生的。目前,我正在检索数据并将其存储在DataTable中,然后使用EPPlus将其导出到excel。我开始耗尽大约150000条记录的内存。完成整个任务大约需要2-3分钟。我认为填充数据表时内存不足 数据位于SQL数据库的服务器上,我们必须将excel文

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

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

数据位于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();
     }
}
}

我想我需要从更大的角度进行调整。正如你们中的许多人所说,不可能处理如此多的行。我将从整体上研究解决这个问题的另一种方法。谢谢大家的帮助

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


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

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


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

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

您应该始终使用set_range(“A1:A50”)=字符串数组。您可以创建一个50字符串的字符串数组,并使用set_range()对其进行设置

我不知道如何处理EPPlus,如果您创建了很多对象来设置DataTable而没有处理它,它会抛出内存不足的问题,因为这些对象可能不是CLR对象

为了便于用户阅读,您可以尝试使用多个工作表来编写数据


有关

的详细信息,如果要为每个单元格或每行设置值和格式,则需要时间

您应该始终使用set_range(“A1:A50”)=字符串数组。您可以创建一个50字符串的字符串数组,并使用set_range()对其进行设置

我不知道如何处理EPPlus,如果您创建了很多对象来设置DataTable而没有处理它,它会抛出内存不足的问题,因为这些对象可能不是CLR对象

为了便于用户阅读,您可以尝试使用多个工作表来编写数据


有关

的详细信息,首先,您已经在使用
SqlDataReader
。这是为了逐记录处理。如果您创建一个

while (reader.Read())
{
   // Export row
}
循环,您不应该遇到内存问题-但是,它可能会很慢

在上面的
//导出行
部分中,您可能希望使用ADO写入Excel工作表,这基本上可以归结为打开到SQL文件的数据库连接,并像插入普通数据库一样插入ing。应该有代码,以便向您展示如何做到这一点(例如)

[我将如何做的旁注:

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

]


然而,正如其他人已经指出的,150万行不是Excel可以处理的数据量。

首先,您已经在使用
SqlDataReader
。这是为了逐记录处理。如果您创建一个

while (reader.Read())
{
   // Export row
}
循环,您不应该遇到内存问题-但是,它可能会很慢

在上面的
//导出行
部分中,您可能希望使用ADO写入Excel工作表,这基本上可以归结为打开到SQL文件的数据库连接,并像插入普通数据库一样插入ing。应该有代码,以便向您展示如何做到这一点(例如)

[我将如何做的旁注:

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

]


然而,正如其他人已经指出的,150万行不是Excel可以处理的数据量。

Excel电子表格上有行限制。Excel 2003为65k,2010为1mg。。对其他记录不太清楚。将超过100万条记录导出到Excel是不可能的。这是Excel在单个工作簿中允许的最多记录。您是否可以包含一些代码,以便我们可以查看您当前正在执行的操作?Excel电子表格上有行限制。Excel 2003为65k,2010为1mg。。对其他记录不太清楚。将超过100万条记录导出到Excel是不可能的。这是Excel在单个工作簿中允许的最多记录。您是否可以包含一些代码,以便我们查看您当前正在执行的操作?我想我会尝试一下,因为我不关心公式或格式。谢谢,我想我会试试这个,因为我不在乎公式或格式。非常感谢。