簡體   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