我继承了一个支持/增强的.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
导入这些文件需要一个年龄(差不多半小时)。
我怀疑有更好的方法可以做到这一点。我正在寻找建议。
提前致谢。
答案 0 :(得分:3)
看看BULK INSERT。
http://msdn.microsoft.com/en-us/library/ms188365(v=SQL.90).aspx
基本上,您将SQL Server指向CSV格式的文本文件,它完成了将数据拉入表格的所有逻辑。如果您需要按摩它,可以将文本文件拉到SQL Server中的暂存位置,然后运行存储过程将其按照您要查找的格式进行按摩。
答案 1 :(得分:1)
主要选项(除了从头开始编写自己的代码)是:
jkohlhepp关于将数据拉入临时表然后清理它的建议是一个很好的例子,也是ETL过程中非常常见的模式。但是如果在TSQL中你的“按摩”并不容易,那么无论如何你都可能需要一些.NET代码,无论是在SSIS还是在CLR程序中。
我个人会在你的情况下使用SSIS,因为看起来数据格式不是很干净,所以你可能需要一些自定义代码来清理/重新格式化数据到数据库的路上。但是,它取决于您最熟悉/最有效的方式以及您现有的工具和标准。
答案 2 :(得分: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()