vb.net - 在VB.Net中将Excel数据导入SQLite数据库的有效方法

标签 vb.net sqlite

我正在创建一个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/

相关文章:

c# - Winforms 开始居中(就高度而言)但在屏幕左侧

c# - vb.net mysql 将文本框的值与表列中的单个值进行比较

sql - 连接两个表并列具有相同名称的列sql

android - 如何更新android sqlite数据库中的新行

sqlite - 要在 sqlite 数据库中存储为 BLOB 的图像的最大大小是多少?

c# - 如果对象是通用列表

vb.net - 如何获取混淆的 .NET 代码中的错误行号?

.net - 在 NCalc 中为什么 'if (12 > 8)' 解析为 false?

objective-c - sqlite数据库创建问题

android - 如何从数据库中提取单行