【问题标题】:Moving a large SQL query to Excel将大型 SQL 查询移至 Excel
【发布时间】:2012-11-27 15:06:12
【问题描述】:

我当前项目的一部分涉及从包含 120,000 多条记录的大型 SQL 表填充 Excel 工作表。我目前正在使用带有 while 循环的 SqlDataReader 来直接填充新的 Excel 工作表,但显然这需要不切实际的时间。使用 StringBuilder 构建本地 .CSV 文件 then 在 Excel 中打开该文件似乎是一个更快的选择。是每千行左右将数据转储到文件中,还是一次全部写入?或者有没有更有效的方法来导入我没有考虑的这些数据?

数据集因用户输入而异,因此我不能简单地附加到现有文件。

当前代码:

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)
            }

【问题讨论】:

  • 你试过什么?您是否有性能测试来尝试各种选项?您显示的代码与编写 CSV 文件无关。
  • 正如我在最初的帖子中所说,我目前正在使用带有 while 循环的 SqlDataReader 来直接填充新的 Excel 工作表。我一直在探索不同的选择,但在我开始构建 CSV 之前,我正在寻找外部意见。我不是在寻找代码示例,我只是好奇是否有更有效的替代方案。

标签: c# sql-server excel


【解决方案1】:

好吧,我会不惜一切代价避免 Excel 互操作。您只编写 .CSV 文件的想法有很多优点。与往常一样,“最佳”性能取决于环境,但单元测试总是有帮助。

System.IO 非常理想。我会从SqlDataReader 中读取一行并写入 CSV 行。它变成了非常简单的代码,我敢打赌它相当“快”。

祝你好运。

【讨论】:

    【解决方案2】:

    一个大问题是您正在逐个单元格地填充 Excel 工作表,这很慢,因为每次调用 .Value2 设置器时都会进行 COM 互操作调用。

    如果您为要放入 excel 的所有数据(M 行 N 列)分配一个数组,创建一个范围对象来表示该范围,然后使用.Value2 二传手。

    【讨论】:

      【解决方案3】:

      在c#中使用DocumentFormat.OpenXml.Spreadsheet,您可以将该数据集写入Xlsx格式或创建xml文件using System.xml或使用第三方工具/创建自己的excel xml,创建xls格式。

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 2016-12-28
        • 2022-01-16
        • 2021-04-12
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 2012-07-07
        相关资源
        最近更新 更多