我正在创建一个VB.Net应用程序,该应用程序将数据存储在SQLite后端中。数据来自用户可以从中导入的excel工作簿。每个工作簿都有一个工作表(约30,000行),该工作表经过重新格式化后再导入到新表中。最有效的方法是什么?
我目前正在将Excel的整个范围读入2D数组。循环遍历此数组中的行,并将每行添加到长的SQL语句中,该语句每千行执行一次。但这在遍历数组位和推送到SQLite步骤方面都非常缓慢。我忍不住想,必须有一种更有效的方法来做到这一点。
谢谢,
代码如下:
“首先打开xls重新格式化器书籍,然后阅读我们的数据
Dim xlApp作为新的Excel.Application
Dim xlWorkBook作为Excel.Workbook
Dim xlWorkSheet作为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()
最佳答案
导出为CSV格式并使用批量加载。
关于vb.net - 在VB.Net中将Excel数据导入SQLite数据库的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235778/