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

3
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我接手了一个.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

导入这些文件需要很长时间(大约半个小时)。

我怀疑有更好的方法来完成。我正在寻求建议。

提前致谢。


continue-goto,无呼。 (我知道vb.net在2005年之前没有continue) :) - Jacob
3个回答

3
看看BULK INSERT。
基本上,您将SQL Server指向以CSV格式的文本文件,它将执行将数据拉入表格的所有逻辑。如果您需要对其进行更多操作,可以将文本文件拉入SQL服务器中的暂存位置,然后运行存储过程对其进行进一步处理,使其符合您所需的格式。
链接:http://msdn.microsoft.com/en-us/library/ms188365(v=SQL.90).aspx

+1 但文件格式不必是CSV。您可以指定任何类型的行和字段终止符。 - user596075

1

除了从头开始编写自己的代码之外,主要选项包括:

  • BULK INSERT或bcp.exe,如果您的数据格式干净,则可以很好地工作
  • 如果需要工作流程、数据类型转换、数据清洗等,则使用SSIS。
  • .NET SqlBulkCopy API

jkohlhepp关于将数据拉入暂存表中然后进行清理的建议是一个很好的建议,并且在ETL过程中是非常常见的模式。但是,如果您的“调整”在TSQL中不容易完成,那么您可能仍然需要一些.NET代码,无论是在SSIS中还是在CLR过程中。

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


0
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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接