C#でSQLiteのトランザクションを使う

データベースではトランザクションという仕組みがよく使われます。

トランザクションとは、複数の処理を関連した1つの単位として扱う仕組みです。

 

例えば預金残高を管理するデータベースがあるとします。AさんからBさんに振込があったらAさんの残高をマイナスしてBさんの残高をプラスするという処理になりますが、Aさんの処理をしてBさんの処理が完了するまでの間は残高に不整合が起きていることになります。(この一瞬の間に別の処理が動いてしまったら大変です)

AさんとBさんの処理は必ずセットで実行されないと困ってしまいますが、そのあたりをうまくやってくれるのがトランザクションです。

 

SQLiteでもトランザクション機能を利用することができます。


トランザクションの開始と完了

トランザクションを開始するにはSQLiteConnectionクラスのBeginTransactionメソッドを呼び出します。

トランザクションが開始されるとINSERTやUPDATEなどのデータを更新するようなSQL文はすぐにはデータベースへ反映されません。Commitメソッドを呼び出すことでトランザクションを終了し、開始してからの更新内容がまとめてデーターベースに反映されるという仕組みです。

ちなみにCommitではなくRollbackメソッドを呼び出すと、トランザクション開始後の更新内容をすべてキャンセルしてトランザクションを終了します。

 

using (var connection = new SQLiteConnection(connectionString))
{
    connection.Open();

    using (var transaction = connection.BeginTransaction())
    {
        try
        {
            //ココでいろいろ更新処理をする



            transaction.Commit();
        }
        catch
        {
            transaction.Rollback();
            throw;
        }
    }

    connection.Close();
}