2009-07-15 16 views
3

Visual Studioでsqliteデータベースに大量の埋め込みを実行する必要があります。誰もこれを行う方法を知っていますか?SQLite.Netデータベースへの一括挿入

+0

似たような質問への回答はここ[so](http://stackoverflow.com/questions/364017/fest-bulk-inserts-in-sqlite3)を見てください。 – lexu

答えて

1

通常の挿入文を作成し、データセットをループし、関連するデータをデータベースに対して実行する前にクエリ文字列に挿入することができます。

7

SQLiteを使用すると、トランザクションを開き、すべてのデータをループし、関連するSQL INSERTコマンドを実行し、トランザクションをコミットすることでこれを実行できます。これはSQLiteで一括して挿入する最も速い方法です。

+0

これは、どのADO準拠のDBドライバでも最も速い方法です:http://sqlite.phxsoftware.com/forums/t/134.aspx BeginTransactionの前に接続を開く必要があります。 – basarat

1

私は同じことをする必要があった、私はSqlite.Netフォーラムでこの答えを見つけた、誰かにとって興味深いかもしれない。

http://sqlite.phxsoftware.com/forums/t/134.aspx

+0

ページが存在しませんこれ以上の理由で、回答には回答が含まれている必要があり、追加情報のリンクを追加することができます。 – Rick

1
private void prepareConnectionForBulkInsert(SQLiteConnection cn) 
    { 

     SQLiteCommand stmt; 

     stmt = new SQLiteCommand("PRAGMA synchronous=OFF", cn); 
     stmt.ExecuteNonQuery(); 

     stmt = new SQLiteCommand("PRAGMA count_changes=OFF", cn); 
     stmt.ExecuteNonQuery(); 

     stmt = new SQLiteCommand("PRAGMA journal_mode=MEMORY", cn); 
     stmt.ExecuteNonQuery(); 

     stmt = new SQLiteCommand("PRAGMA temp_store=MEMORY", cn); 
     stmt.ExecuteNonQuery(); 

    } 
2

私は私のUWPアプリでsqliteのを扱うためのSQLite.Net.Async-PCL nugetパッケージを使用していると私はInsertAllAsync方法が本当に高速であることが分かりました。ループを使用し、ちょうどInsertAsyncを呼び出したときに約10分かかっていた1秒未満で、テーブルに約33,000行を挿入することができました。

私はソースをチェックして、InsertAllメソッドのトランザクションを使用しています。これはすべて面倒です。あなたのアイテムのリストを渡すだけで、どんなフープでもジャンプする必要はありません。