繁体   English   中英

批量导入文本文件 / VB2005 / SQL Server 2005

[英]Bulk importing text files / VB2005 / SQL Server 2005

我继承了一个 .NET 应用程序来支持/增强它读取几十万行和数百万行之一的几个文件。

原始开发人员给我留下了如下代码:-

                For Each ModelListRow As String In ModelListDataArray
                    If ModelListRow.Trim.Length = 0 Or ModelListRow.Contains(",") = False Then
                        GoTo SKIP_ROW
                    End If

                    Dim ModelInfo = ModelListRow.Split(",")
                    Dim ModelLocation As String = UCase(ModelInfo(0))
                    Dim ModelCustomer As String = UCase(ModelInfo(1))
                    Dim ModelNumber As String = UCase(ModelInfo(2))

                    If ModelLocation = "LOCATION" Or ModelNumber = "MODEL" Then
                        GoTo SKIP_ROW
                    End If

                    Dim MyDataRow As DataRow = dsModels.Tables(0).NewRow
                    MyDataRow.Item("location") = ModelLocation.Replace(vbCr, "").Replace(vbLf, "").Replace(vbCrLf, "")
                    MyDataRow.Item("model") = ModelNumber.Replace(vbCr, "").Replace(vbLf, "").Replace(vbCrLf, "")
                    dsModels.Tables(0).Rows.Add(MyDataRow)
SKIP_ROW:
                Next

导入这些文件需要很长时间(嗯,将近半个小时)。

我怀疑有更好的方法来做到这一点。 我正在寻找建议。

提前致谢。

看看 BULK INSERT。

http://msdn.microsoft.com/en-us/library/ms188365(v=SQL.90).aspx

基本上,您将 SQL 服务器指向 CSV 格式的文本文件,它执行将数据拉入表格的所有逻辑。 如果您需要更多地修改它,您可以将文本文件拉到 SQL 服务器中的暂存位置,然后运行存储的 proc 将其修改为您正在寻找的格式。

主要选项(除了从头开始编写自己的代码)是:

  • BULK INSERT 或 bcp.exe,如果您的数据格式清晰,则效果很好
  • SSIS,如果您需要工作流、数据类型转换、数据清理等。
  • .NET SqlBulkCopy API

jkohlhepp 关于将数据拉入临时表然后清理它的建议是一个很好的建议,也是 ETL 过程中非常常见的模式。 但是,如果您的“按摩”在 TSQL 中不容易做到,那么您可能无论如何都需要一些 .NET 代码,无论是在 SSIS 中还是在 CLR 过程中。

就您个人而言,我会在您的情况下使用 SSIS,因为看起来数据的格式不干净,因此您可能需要一些自定义代码来清理/重新格式化进入数据库的数据。 但是,它确实取决于您最熟悉/最高效的方式以及您拥有的现有工具和标准。

Dim ExcelConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcelSpreadsheet.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
ExcelConnection.Open()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM