6

さて、私はSQLiteを使用していますが、非クエリの実行を開始すると、おそらく10k以上のコマンド[.sqlファイル]が発生します。データベースへの情報の追加を終了するのに最大10分以上かかる可能性があるのは非常に遅いことがわかりました.

とにかく、これは私の 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;
}

完了するまでに数秒かかるようにする方法があることを願っています。

4

1 に答える 1

5

SQLite の問題は、挿入、更新、削除のコマンドをトランザクションにラップすることですそうしないと、非常に遅くなります。.NET Data Provider に組み込まれているトランザクション サポートを使用してこれを行うか、.sql ファイルを読み込んでいるため、最初の行begin transactionと最後の行を作成することができますcommit transaction。どちらの方法でも機能するはずです。

.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;
}
于 2013-02-26T21:25:01.973 に答える