Эффективный способ импорта данных Excel в базу данных SQLite в VB.Net - PullRequest
0 голосов
/ 11 февраля 2012

Я создаю приложение 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()

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Возможно, немного округлый, но вы можете импортировать свой файл в Access вместо Excel, а затем экспортировать в SQLite.

Есть драйвер ODBC для SQLite:

http://www.ch -werner.de / sqliteodbc /

Используя это, вы можете экспортировать из Access в SQLite. Вот пример этого из графического интерфейса. Мое базовое предположение состоит в том, что это программируется или может быть автоматизировано (возможно, из VBA).

http://support.microsoft.com/kb/200427

Я предполагаю, что это даст вам минимальные возможности форматирования, но это должен быть довольно чистый (и немедленный) способ сделать это. Драйвер с открытым исходным кодом, так что вы можете расширить его, если вы достаточно опытны в C.

0 голосов
/ 11 февраля 2012

Экспорт в формат CSV и использование массовой загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...