MENU

C# SQLServerでトランザクション

データベース操作において、トランザクションは非常に重要な概念です。特に、複数の操作を一つのまとまりとして扱い、全ての操作が成功した場合にのみデータベースに反映させたい場合に使用します。C#でSQL Serverを使用する際のトランザクション処理について、初心者にも分かりやすく解説します。

目次

トランザクションとは

トランザクションは、複数のデータベース操作をまとめて一つの論理的な作業単位として扱う機能です。トランザクションには以下の特性があります:

  • 原子性(Atomicity):全ての操作が成功するか、全て失敗するかのどちらか
  • 一貫性(Consistency):トランザクション前後でデータベースの整合性が保たれる
  • 独立性(Isolation):他のトランザクションの影響を受けない
  • 永続性(Durability):完了したトランザクションの結果は永続的に保存される

C#でのトランザクション実装

以下に、C#でSQL Serverを使用してトランザクションを実装する基本的なコード例を示します:

using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=YourDatabase;Integrated Security=True";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            SqlTransaction transaction = null;

            try
            {
                // トランザクションの開始
                transaction = connection.BeginTransaction();

                // 1つ目のクエリ
                using (SqlCommand command1 = new SqlCommand("UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountId = 1", connection, transaction))
                {
                    command1.ExecuteNonQuery();
                }

                // 2つ目のクエリ
                using (SqlCommand command2 = new SqlCommand("UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountId = 2", connection, transaction))
                {
                    command2.ExecuteNonQuery();
                }

                // トランザクションのコミット
                transaction.Commit();
                Console.WriteLine("トランザクションが成功しました。");
            }
            catch (Exception ex)
            {
                // エラーが発生した場合、ロールバック
                Console.WriteLine($"エラーが発生しました: {ex.Message}");
                transaction?.Rollback();
            }
        }
    }
}

コードの解説

  1. 接続の確立: SqlConnection オブジェクトを作成し、データベースに接続します。
  2. トランザクションの開始: connection.BeginTransaction() でトランザクションを開始します。
  3. クエリの実行: SqlCommand オブジェクトを作成する際、コンストラクタの第3引数にトランザクションオブジェクトを渡します。これにより、コマンドがトランザクションの一部として実行されます。
  4. トランザクションのコミット: 全ての操作が成功した場合、transaction.Commit() でトランザクションをコミットします。
  5. エラー処理とロールバック: 例外が発生した場合、transaction.Rollback() でトランザクションをロールバックし、データベースの状態を元に戻します。

注意点

  • トランザクション内の操作は必要最小限に抑えましょう。長時間のトランザクションはパフォーマンスに影響を与える可能性があります。
  • 適切な例外処理を行い、必ずロールバックの処理を実装してください。
  • 接続とトランザクションのリソースは確実に解放するように注意しましょう。

まとめ

C#でSQL Serverのトランザクションを使用する基本的な手順は以下の通りです:

  1. データベース接続を確立する
  2. トランザクションを開始する
  3. トランザクション内でSQLコマンドを実行する
  4. 全ての操作が成功したらコミットする
  5. エラーが発生した場合はロールバックする

トランザクションを適切に使用することで、データの整合性を保ちながら、複雑なデータベース操作を安全に実行することができます。銀行の送金処理や在庫管理システムなど、データの正確性が重要なアプリケーションで特に有用です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次