[英]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 将其修改为您正在寻找的格式。
主要选项(除了从头开始编写自己的代码)是:
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.