2012-02-10 21 views
0

SQLiteバックエンドにデータを格納するVB.Netアプリケーションを作成しています。データは、ユーザーがインポートできるExcelブックに入っています。各ワークブックには、改訂されて新しいテーブルにインポートされるワークシート(約30,000行)があります。これを行う最も効率的な方法は何ですか?VB.NetのSQLiteデータベースにExcelデータを効率的にインポートする

私は現在、Excelから2D配列に全範囲を読み込んでいます。この配列の行をループし、各行を1000行ごとに実行される長いSQL文に追加します。しかし、これは配列ビットをループすることとSQLiteのステップに進むことの両方で痛みを伴います。私は助けることができませんが、これを行うより効率的な手段がなければならないと考える。

おかげで、以下

コード: 「は、第1 Excel.Worksheet

としてExcel.Workbook 薄暗いxlWorkSheetなどの新しいまずExcel.Application 点心xlWorkBookとしてのXLS reformater帳を開いて、私たちのデータに 点心xlAppを読みます
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() 

答えて

0

csv形式にエクスポートし、バルクロードを使用します。

+0

これは機能するかもしれません。私はバルクロードに精通していないし、sqliteとVB.Netに関連する参照を見つけることができません ありがとう –

+0

参照してくださいhttp://stackoverflow.com/questions/928873/how-do-i-bulk-insert -with-sqlite – Chriseyre2000

0

おそらくわずかですが、ExcelではなくAccessにファイルをインポートしてからSQLiteにエクスポートすることができます。

SQLiteのためのODBCドライバがあります:

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

あなたはSQLiteのにAccessからエクスポートできることを使用します。 GUIから実行する例を示します。私の基本的な前提は、プログラム可能であるか、あるいは(おそらくVBAから)自動化することができるということです。

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

私はそれはあなたに、最小限の書式設定オプションを提供しますが、それはそれをやってのではなく、クリーン(および即時)の方法であるべきと仮定します。ドライバはオープンソースなので、C言語で十分に堪能であれば拡張することができます。

+0

これは、データがネイティブでExcel形式であるため、エンドユーザーが行う必要がある処理です。まず最初にアクセスすると少し痛みがあります。 –

+0

残念ながら私はこれよりも簡単な方法を見つけることができませんでした。私がまだやっていない唯一のことは、それを自動化しようとすることです。私が仕事をしているところでは、業界が明らかに知っていることだから、アクセスするデータダンプが多いCADモデラーがあります。そのデータは、最終的には、ファッションについてのラウンドでOracleに移行します。それはまるで大騒ぎです。 – Max

+0

私は、ExcelのスプレッドシートをSQLデータベースにインポートするための.Net Webアプリケーションをコーディングしています。そのコードは、SQLiteデータベースとやりとりしてデータをやりとりしますが、Excelセルのキャリッジリターンに大きな問題があります。 Webサービスは、LFと引き換えにCRLFを取り除きます。 Excelは各LFを新しいセルに移植するのが好きなので、動作させるにはちょっと面倒です。特に、セルはレコードの最後にLFが必要です。 – htm11h

関連する問題