2013-02-26 75 views
6

私はSQLiteを使用していますが、おそらく10k +コマンド[.sqlファイル]以外のクエリを実行し始めます。私は非常に遅いので、データベースに情報を追加するのに10分以上かかることがあります。SQLite非常に遅いExecuteNonQuery

とにかくこれは私のExecuteNonQueryコードです。

public int ExecuteNonQuery(string sql) 
{ 
    var cnn = new SQLiteConnection(_dbConnection); 
    cnn.Open(); 
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql}; 
    int rowsUpdated = mycommand.ExecuteNonQuery(); 
    cnn.Close(); 
    return rowsUpdated; 
} 

終了まで数秒かかることがあります。

+2

おそらくあなたの問題はあなたの質問にありますか? – Fox32

+2

私はそれが非常にシンプルなので疑問に思うINSERT INTO CMDS .sqlスクリプトから –

+1

あなたはbegin-commitステートメントでラップしていますか? –

答えて

4

SQLiteのものは、があります。トランザクションでwrap insert-update-deleteコマンドを実行しないと、痛いほど遅くなります。 .NETデータプロバイダに組み込まれたトランザクションサポートを使用して、または最初の行begin transactionと最後の行commit transactionを作成できる.sqlファイルを読み込んでいるため、これを行うことができます。どちらの方法でも動作するはずです。

.sqlファイルで実行する場合は、次のようになります。

begin transaction; 

insert into ...; 
update ...; 
delete ...; 

commit transaction; 

コードで行うと、このようになります。

public int ExecuteNonQuery(string sql) 
{ 
    var cnn = new SQLiteConnection(_dbConnection); 
    cnn.Open(); 
    var transaction = cnn.BeginTransaction(); 
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql}; 
    mycommand.Transaction = transaction; 
    int rowsUpdated = mycommand.ExecuteNonQuery(); 
    transaction.Commit(); 
    cnn.Close(); 
    return rowsUpdated; 
} 
+0

上記のコードをお持ちの場合、あなたが指しているものであなたの答えを編集することができます。ので、私はトランザクションを開始し、comitの行を.sqlファイルに追加したので、私はSQLの論理エラー –

+0

私はそれらの行を.sqlファイルの先頭と末尾の行に追加したが、私はそれが何も、今は凍っている。 –

+0

@RuneS:うーん...それは私がそれを行う方法であり、それはうまく動作するので、それは奇妙です。初めてsqliteから戻ったエラーは何でしたか? –