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:
コメント