Я создаю приложение VB.Net, которое хранит данные в бэкэнде SQLite.Данные поступают в рабочие книги Excel, из которых пользователь может импортировать.В каждой книге есть один лист (около 30 000 строк), который немного переформатируется и импортируется в новую таблицу.Какой самый эффективный способ сделать это?
В настоящее время я читаю во всем диапазоне от Excel в 2D-массив.Цикл по строкам в этом массиве и добавление каждой строки в длинную инструкцию SQL, которая выполняется каждую тысячу строк.Но это мучительно медленно как при циклическом прохождении бита массива, так и при переходе к шагу SQLite.Я не могу помочь, но думаю, что для этого должны быть более эффективные средства.
Спасибо,
Код ниже: «Сначала откройте книгу по переформатированию xls и прочитайте в наших данных Dim xlApp AsНовый Excel.Application Dim xlWorkBook As Excel.Workbook Dim xlWorkSheet As Excel.Worksheet
xlWorkBook = xlApp.Workbooks.Open(strFile)
xlWorkSheet = xlWorkBook.Worksheets("ToDSS")
Dim r As Excel.Range = xlWorkSheet.UsedRange
Dim array(,) As Object = r.Value(Excel.XlRangeValueDataType.xlRangeValueDefault)
xlWorkBook.Close()
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
SQLconnect.Open()
SQLcommand = SQLconnect.CreateCommand
'now loop through the rows inserting each into the db
Dim curDate As Date
strSQL = ""
Dim batch As Integer = 0
For row As Integer = 16 To array.GetUpperBound(0)
strSQL += "INSERT INTO scenario_" & strScenarioName & " VALUES ('"
curDate = array(row, 1)
strSQL += curDate.ToString("yyyy'-'MM'-'dd") + "'"
For col = 2 To 30
strSQL += ", " & array(row, col)
Next
strSQL += " );" & vbCrLf
If batch > 1000 Or row = array.GetUpperBound(0) Then
Debug.Print(Str(row))
SQLcommand.CommandText = strSQL
SQLcommand.ExecuteNonQuery()
Debug.Print("pushed")
strSQL = ""
batch = 0
Else
batch += 1
End If
Next
SQLcommand.Dispose()
SQLconnect.Close()