VB中从SQL Server到Excel的海量数据导出

Posted

技术标签:

【中文标题】VB中从SQL Server到Excel的海量数据导出【英文标题】:Mass data export from SQL Server to Excel in VB 【发布时间】:2013-12-20 20:31:08 【问题描述】:

我有一些适用于较小数据集的代码。我使用的大量数据集(800k 行,25 列)出现“内存不足”错误。我试图找出一种方法来将其更改为逐列批量导出,或者可能拆分多组行,而不是一次全部导出。

显然它无法处理那么多数据。我无法弄清楚如何将它分开一些。有任何想法吗?谢谢!

For Each dt As System.Data.DataTable In ds.Tables
        ' Copy the DataTable to an object array
        Dim rawData(dt.Rows.Count, dt.Columns.Count - 1) As Object

        ' Copy the column names to the first row of the object array
        For col = 0 To dt.Columns.Count - 1
            rawData(0, col) = dt.Columns(col).ColumnName
        Next

        ' Copy the values to the object array
        For col = 0 To dt.Columns.Count - 1
            For row = 0 To dt.Rows.Count - 1
                rawData(row + 1, col) = dt.Rows(row).ItemArray(col)
            Next
        Next

        ' Calculate the final column letter
        Dim finalColLetter As String = String.Empty
        Dim colCharset As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        Dim colCharsetLen As Integer = colCharset.Length

        If dt.Columns.Count > colCharsetLen Then
            finalColLetter = colCharset.Substring( _
             (dt.Columns.Count - 1) \ colCharsetLen - 1, 1)
        End If

        finalColLetter += colCharset.Substring( _
          (dt.Columns.Count - 1) Mod colCharsetLen, 1)

        ' Fast data export to Excel
        Dim excelRange As String = String.Format("A1:01", finalColLetter, dt.Rows.Count + 1)
        excelSheet.Range(excelRange, Type.Missing).Value2 = rawData

        excelSheet = Nothing
    Next

【问题讨论】:

EPplus 是很好的解决方案。你试过了吗?如果您在 .net 中使用 excel 对象,那么它肯定会给您带来内存不足的异常。最好尝试使用一些开源 dll。请参考链接epplus.codeplex.com。你可能会知道它是如何工作的!它使用您项目中上传的模板文件并将其复制到新的模板文件中并将数据表转储到新创建的excel文件中。 有什么理由不使用可以从代码运行的 SSIS? 【参考方案1】:

还有其他操作 Excel 电子表格的代码吗?如果没有,将其写入 CSV 格式的平面文本文件可能会更快。 Excel 将打开 CSV 并像普通电子表格一样显示它。

【讨论】:

到目前为止,没有。不能说我知道如何导出为 csv,但我会调查一下。 看起来他期望(或允许)数据集中的多个表。这意味着多个 csv 文件,其中 excel 可以在一个工作簿中完成所有这些操作。 @JoelCoehoorn 是的,可能是这样,我不确定。此外,如果有多个 DataTable,则上面的代码中可能存在潜在错误。您将 excelSheet 设置为 Nothing,但您永远不会在下一个 for 循环中重新创建它。在 VB.Net 中搜索从 DataTable 写入 CSV 文件的示例代码,您会发现很多。

以上是关于VB中从SQL Server到Excel的海量数据导出的主要内容,如果未能解决你的问题,请参考以下文章

使用 VB.NET 表单从 SQL Server 到 Excel 的日期数据检索

在 VB.NET 中从 SQL Server 执行存储过程?

vb.net中从excel读取数据到DataGridView中的数据显示问题

VB6/Microsoft Access/DAO 到 VB.NET/SQL Server... 有建议吗?

如何使用 vb.net 将 excel 文件导入 sql server

将数据从 Excel 复制到 SQL 数据库 VB.NET