C# 将大型SQL查询移动到Excel
我当前项目的一部分涉及从包含120000多条记录的大型SQL表填充Excel工作表。我目前正在使用带有while循环的SqlDataReader来直接填充一个新的Excel工作表,但显然这需要不现实的时间。使用StringBuilder构建本地.CSV文件,然后在Excel中打开该文件似乎是一个更快的选择。是每一千行左右将数据转储到文件中,还是一次写入所有数据?或者有没有更有效的方法导入我没有考虑的数据 数据集根据用户输入的不同而不同,因此我不能简单地附加到现有文件 当前代码:C# 将大型SQL查询移动到Excel,c#,sql-server,excel,C#,Sql Server,Excel,我当前项目的一部分涉及从包含120000多条记录的大型SQL表填充Excel工作表。我目前正在使用带有while循环的SqlDataReader来直接填充一个新的Excel工作表,但显然这需要不现实的时间。使用StringBuilder构建本地.CSV文件,然后在Excel中打开该文件似乎是一个更快的选择。是每一千行左右将数据转储到文件中,还是一次写入所有数据?或者有没有更有效的方法导入我没有考虑的数据 数据集根据用户输入的不同而不同,因此我不能简单地附加到现有文件 当前代码: SqlConne
SqlConnection cnnct = new SqlConnection("Data Source=Source;Initial Catalog=Catalog;Integrated Security=True;");
cnnct.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnnct;
string cmdText = "SELECT * FROM TABLE";
cmd.CommandText = cmdText;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
columnChar = 'A';
rowCount++;
cellName = columnChar.ToString() + rowCount.ToString();
ws.get_Range(cellName, cellName).Value2 = dr["EXAMPLE_FIELD"].ToString();
columnChar++;
//The above three lines are identical for each field (there are 26)
}
使用c#中的
DocumentFormat.OpenXml.Spreadsheet
,您可以将该数据集写入Xlsx
格式,或者使用System.xml创建xml文件,或者使用第三方工具/create own excel xml创建xls格式。一个大问题是您正在逐个单元格填充excel工作表单元格,这很慢,因为每次调用.Value2
setter时都要进行COM互操作调用
如果为要放入excel的所有数据分配一个数组(M行x N列),创建一个范围对象来表示该范围,并使用.Value2
setter将数组复制到该范围,则速度会快得多 好吧,我会不惜一切代价避免Excel互操作。您只编写.CSV文件的想法有很多优点。和往常一样,“最佳”性能取决于环境,但单元测试总是有帮助的
System.IO
非常理想。我只需从SqlDataReader
中读取一行,然后编写CSV行。它变成了非常简单的代码,我打赌它相当“快”
祝你好运。你试过什么?您是否有性能测试来尝试各种选项?您显示的代码与编写CSV文件无关。正如我在第一篇文章中所说的,我目前正在使用SqlDataReader和while循环来直接填充新的Excel工作表。我一直在探索不同的选择,但在我开始构建CSV之前,我正在寻求外界的意见。我不是在寻找代码示例,我只是想知道是否有更有效的替代方案。