Массовый импорт текстовых файлов / VB2005 / SQL Server 2005 - PullRequest
3 голосов
/ 12 августа 2011

Я унаследовал приложение .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

и для импорта этих файлов требуется время (ну, почти полчаса).

Я подозреваю, что есть НАМНОГО лучший способ сделать это.Я ищу предложения.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 12 августа 2011

Посмотрите на BULK INSERT.

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

По сути, вы указываете SQL Server на текстовый файл в формате CSV, и он выполняет всю логику переноса данных в таблицу.,Если вам нужно выполнить более массивный массаж, вы можете перетащить текстовый файл в промежуточную папку в SQL Server, а затем запустить сохраненный процесс, чтобы преобразовать его в нужный вам формат.

1 голос
/ 12 августа 2011

Основные параметры (кроме написания собственного кода с нуля):

  • BULK INSERT или bcp.exe, которые хорошо работают, если ваши данные отформатированы
  • SSIS, если вам нужен рабочий процесс, преобразования типов данных, очистка данных и т. д.
  • .NET SqlBulkCopy API

предложение jkohlhepp о переносе данных в промежуточную таблицу, то ее очистка является хорошей иочень распространенная модель в процессах ETL.Но если ваш «массаж» нелегко сделать в TSQL, то вам, вероятно, все равно понадобится некоторый код .NET, будь то SSIS или процедура CLR.

Лично я бы использовал SSIS в вашем случае,потому что похоже, что данные не отформатированы, поэтому вам, вероятно, понадобится некоторый пользовательский код для очистки / переформатирования данных по пути к базе данных.Однако это зависит от того, с чем вам удобнее работать и какие инструменты и стандарты у вас есть.

0 голосов
/ 05 апреля 2013
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()
...