[SQLite] トランザクション処理をする

スポンサーリンク

SQLiteでトランザクション処理を行うには

SQLiteConnection1オブジェクトの、BeginTransactionメソッド、EndTransactionメソッド、Rollbackメソッドを使用します。
今回は、これらをラッピングしたメソッドを実装します。

VB.NET 編

まずは、トランザクションの開始をする BeginTransactionのラッピングメソッドです。
このメソッドの中で、データベース接続を実施し、接続が成功した場合にトランザクションを開始するようにします。

''' <summary>
''' トランザクション開始処理
''' </summary>
''' <returns>トランザクション開始成功時 True</returns>
''' <remarks></remarks>
Private Function BeginTransaction() As Boolean
    Try
        'データベースのオープンに失敗した場合は処理を抜ける
        If Not Open() Then Return False

        ' データベースがクローズ状態の場合処理終了
        If _conn.State = ConnectionState.Closed Then Return False

        'トランザクションの開始
        _cmd.Transaction = _conn.BeginTransaction()

        Return True
    Catch sqlex As SQLiteException
        System.Diagnostics.Debug.WriteLine(sqlex.Message)

    Catch ex As Exception
        System.Diagnostics.Debug.WriteLine(ex.Message)

    End Try

    Return False
End Function

続いてロールバック処理です。
SQLの実行に失敗した場合のロールバック処理を受け持ちます。

''' <summary>
''' ロールバック処理
''' </summary>
''' <returns>ロールバック成功時 true</returns>
''' <remarks></remarks>
Private Function Rollback() As Boolean
    Try
        ' ロールバック実施
        _cmd.Transaction.Rollback()

        Return True


    Catch sqlex As SQLiteException
        System.Diagnostics.Debug.WriteLine(sqlex.Message)

    Catch ex As Exception
        System.Diagnostics.Debug.WriteLine(ex.Message)

    End Try

    Return False
End Function

最後は、トランザクションの終了処理です。
これまでに実行したSQLのコミット処理を受け持ちます。
また、データベースの切断処理も行います。

''' <summary>
''' トランザクション終了処理
''' </summary>
''' <returns>コミットおよびデータベース切断が成功した場合 True</returns>
''' <remarks></remarks>
Private Function EndTransaction() As Boolean
    Try
        'コミット処理
        _cmd.Transaction.Commit()

        Close()

        Return True

    Catch sqlex As SQLiteException
        System.Diagnostics.Debug.WriteLine(sqlex.Message)

    Catch ex As Exception
        System.Diagnostics.Debug.WriteLine(ex.Message)

    End Try

    Return False
End Function

次回は、これまでに作成したメソッドを一連で動かすメソッドの実装を行います。

C# 編

まずは、トランザクションの開始をする BeginTransactionのラッピングメソッドです。
このメソッドの中で、データベース接続を実施し、接続が成功した場合にトランザクションを開始するようにします。

/// <summary>
/// トランザクション開始処理
/// </summary>
/// <returns>トランザクション開始成功時 true</returns>
private bool BeginTransaction()
{           
    try
    {
        // データベースのオープンに失敗した場合は処理を抜ける
        if (!Open()) return false;

        // データベースがクローズ状態の場合処理終了
        if (_conn.State == System.Data.ConnectionState.Closed) return false;

        // トランザクションの開始
        _cmd.Transaction = _conn.BeginTransaction();

        return true;
    }
    catch (SQLiteException sqlex)
    {

    }
    catch (Exception ex)
    {

    }

    return false;
}

続いてロールバック処理です。
SQLの実行に失敗した場合のロールバック処理を受け持ちます。

/// <summary>
/// ロールバック処理
/// </summary>
/// <returns>ロールバック成功時 true</returns>
private bool Rollback()
{
    try
    {
        // ロールバック実施
        _cmd.Transaction.Rollback();

        return true;
    }
    catch (SQLiteException sqlex)
    {
        System.Diagnostics.Debug.WriteLine(sqlex.Message);
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message);
    }

    return false;
}

最後は、トランザクションの終了処理です。
これまでに実行したSQLのコミット処理を受け持ちます。
また、データベースの切断処理も行います。

/// <summary>
/// トランザクション終了処理
/// </summary>
/// <returns>コミットおよびデータベース切断が成功した場合 true</returns>
private bool EndTransaction()
{
    try
    {
        // コミット処理
        _cmd.Transaction.Commit();

        Close();

        return true;
    }
    catch (SQLiteException sqlex)
    {
        System.Diagnostics.Debug.WriteLine(sqlex.Message);
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message);
    }

    return false;
}

次回は、これまでに作成したメソッドを一連で動かすメソッドの実装を行います。

Please follow and like us:

コメント

タイトルとURLをコピーしました