SqlConnection.BeginTransaction メソッド

定義

データベース トランザクションを開始します。

オーバーロード

BeginTransaction()

データベース トランザクションを開始します。

BeginTransaction(IsolationLevel)

分離レベルを指定して、データベース トランザクションを開始します。

BeginTransaction(String)

トランザクション名を指定して、データベース トランザクションを開始します。

BeginTransaction(IsolationLevel, String)

分離レベルとトランザクション名を指定して、データベース トランザクションを開始します。

BeginTransaction()

データベース トランザクションを開始します。

public:
 System::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public System.Data.SqlClient.SqlTransaction BeginTransaction ();
override this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction () As SqlTransaction

戻り値

新しいトランザクションを表すオブジェクト。

例外

並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。

並列トランザクションはサポートされていません。

次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。

private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction();

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();

            // Attempt to commit the transaction.
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);

            // Attempt to roll back the transaction.
            try
            {
                transaction.Rollback();
            }
            catch (Exception ex2)
            {
                // This catch block will handle any errors that may have occurred
                // on the server that would cause the rollback to fail, such as
                // a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                Console.WriteLine("  Message: {0}", ex2.Message);
            }
        }
    }
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction()

        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

            command.ExecuteNonQuery()

            ' Attempt to commit the transaction.
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")

        Catch ex As Exception
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
            Console.WriteLine("  Message: {0}", ex.Message)

            ' Attempt to roll back the transaction.
            Try
                transaction.Rollback()

            Catch ex2 As Exception
                ' This catch block will handle any errors that may have occurred
                ' on the server that would cause the rollback to fail, such as
                ' a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
                Console.WriteLine("  Message: {0}", ex2.Message)
            End Try
        End Try
    End Using
End Sub

注釈

このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。

または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 SQL Server トランザクション管理モデルの.NET Framework データ プロバイダーが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。

Note

分離レベルを指定しない場合は、既定の分離レベルが使用されます。 メソッドで分離レベルをBeginTransaction指定するには、 パラメーター (BeginTransaction) を受け取るオーバーロードをiso使用します。 トランザクションに設定された分離レベルは、トランザクションが完了した後、接続が閉じられるか破棄されるまで保持されます。 スナップショット分離レベルが有効になっていない データベースで分離 レベルを [スナップショット] に設定しても、例外はスローされません。 トランザクションは、既定の分離レベルを使用して完了します。

注意事項

トランザクションが開始され、サーバーでレベル 16 以上のエラーが発生した場合、メソッドが呼び出されるまで Read トランザクションはロールバックされません。 ExecuteReader で例外はスローされません。

注意事項

クエリが大量のデータを返し、 をSqlException呼び出BeginTransactionすと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。

SQL Server トランザクションの詳細については、「トランザクション (Transact-SQL)」を参照してください。

こちらもご覧ください

適用対象

BeginTransaction(IsolationLevel)

分離レベルを指定して、データベース トランザクションを開始します。

public:
 System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso);
public System.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso);
override this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel) As SqlTransaction

パラメーター

iso
IsolationLevel

トランザクションを実行する分離レベル。

戻り値

新しいトランザクションを表すオブジェクト。

例外

並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。

並列トランザクションはサポートされていません。

次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。

private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception e)
        {
            try
            {
                transaction.Rollback();
            }
            catch (SqlException ex)
            {
                if (transaction.Connection != null)
                {
                    Console.WriteLine("An exception of type " + ex.GetType() +
                        " was encountered while attempting to roll back the transaction.");
                }
            }

            Console.WriteLine("An exception of type " + e.GetType() +
                " was encountered while inserting the data.");
            Console.WriteLine("Neither record was written to database.");
        }
    }
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)
        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
            command.ExecuteNonQuery()
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")
        Catch e As Exception
            Try
                transaction.Rollback()
            Catch ex As SqlException
                If Not transaction.Connection Is Nothing Then
                    Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
                      " was encountered while attempting to roll back the transaction.")
                End If
            End Try

            Console.WriteLine("An exception of type " & e.GetType().ToString() & _
              "was encountered while inserting the data.")
            Console.WriteLine("Neither record was written to database.")
        End Try
    End Using
End Sub

注釈

このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。

または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 SQL Server トランザクション管理モデルの.NET Framework データ プロバイダーが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。

Note

トランザクションがコミットまたはロールバックされると、トランザクションの分離レベルは、自動コミット モード (既定SQL Server) にある後続のすべてのコマンドに対して保持されます。 これにより、REPEATABLE READ の分離レベルが保持され、他のユーザーが行からロックされるなど、予期しない結果が生じる可能性があります。 分離レベルを既定 (READ COMMITTED) にリセットするには、Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ステートメントを実行するか、 ステートメントの直後に SqlTransaction.Commitを呼び出しますSqlConnection.BeginTransaction。 SQL Server分離レベルの詳細については、「トランザクション分離レベル」を参照してください。

SQL Server トランザクションの詳細については、「トランザクション (Transact-SQL)」を参照してください。

注意事項

クエリが大量のデータを返し、 をSqlException呼び出BeginTransactionすと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。

こちらもご覧ください

適用対象

BeginTransaction(String)

トランザクション名を指定して、データベース トランザクションを開始します。

public:
 System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::String ^ transactionName);
public System.Data.SqlClient.SqlTransaction BeginTransaction (string transactionName);
override this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (transactionName As String) As SqlTransaction

パラメーター

transactionName
String

トランザクションの名前です。

戻り値

新しいトランザクションを表すオブジェクト。

例外

並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。

並列トランザクションはサポートされていません。

次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。

private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction("SampleTransaction");

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();

            // Attempt to commit the transaction.
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
            Console.WriteLine("  Message: {0}", ex.Message);

            // Attempt to roll back the transaction.
            try
            {
                transaction.Rollback("SampleTransaction");
            }
            catch (Exception ex2)
            {
                // This catch block will handle any errors that may have occurred
                // on the server that would cause the rollback to fail, such as
                // a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                Console.WriteLine("  Message: {0}", ex2.Message);
            }
        }
    }
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction("SampleTransaction")

        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

            command.ExecuteNonQuery()

            ' Attempt to commit the transaction.
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")

        Catch ex As Exception
            Console.WriteLine("Exception Type: {0}", ex.GetType())
            Console.WriteLine("  Message: {0}", ex.Message)

            ' Attempt to roll back the transaction.
            Try
                transaction.Rollback("SampleTransaction")

            Catch ex2 As Exception
                ' This catch block will handle any errors that may have occurred
                ' on the server that would cause the rollback to fail, such as
                ' a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
                Console.WriteLine("  Message: {0}", ex2.Message)
            End Try
        End Try
    End Using
End Sub

注釈

このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。

パラメーターの transactionName 長さは 32 文字以内にする必要があります。それ以外の場合は例外がスローされます。

パラメーターの値は、 transactionName メソッドの パラメーターに対するRollback後の 呼び出しと パラメーターSaveの呼び出しでsavePoint使用できます。

または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 SQL Server トランザクション管理モデルの.NET Framework データ プロバイダーが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。

SQL Server トランザクションの詳細については、「トランザクション (Transact-SQL)」を参照してください。

注意事項

クエリが大量のデータを返し、 をSqlException呼び出BeginTransactionすと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。

こちらもご覧ください

適用対象

BeginTransaction(IsolationLevel, String)

分離レベルとトランザクション名を指定して、データベース トランザクションを開始します。

public:
 System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso, System::String ^ transactionName);
public System.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso, string transactionName);
override this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel, transactionName As String) As SqlTransaction

パラメーター

iso
IsolationLevel

トランザクションを実行する分離レベル。

transactionName
String

トランザクションの名前です。

戻り値

新しいトランザクションを表すオブジェクト。

例外

並列トランザクションは、複数のアクティブな結果セット (MARS) を使用する場合には使用できません。

並列トランザクションはサポートされていません。

次の例では、 と を SqlConnection 作成します SqlTransaction。 また、 メソッド、、 メソッドのBeginTransactionCommitRollback使用方法も示します。

private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;

        // Start a local transaction.
        transaction = connection.BeginTransaction(
            IsolationLevel.ReadCommitted, "SampleTransaction");

        // Must assign both transaction object and connection
        // to Command object for a pending local transaction.
        command.Connection = connection;
        command.Transaction = transaction;

        try
        {
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception e)
        {
            try
            {
                transaction.Rollback("SampleTransaction");
            }
            catch (SqlException ex)
            {
                if (transaction.Connection != null)
                {
                    Console.WriteLine("An exception of type " + ex.GetType() +
                        " was encountered while attempting to roll back the transaction.");
                }
            }

            Console.WriteLine("An exception of type " + e.GetType() +
                " was encountered while inserting the data.");
            Console.WriteLine("Neither record was written to database.");
        }
    }
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction.
        transaction = connection.BeginTransaction( _
          IsolationLevel.ReadCommitted, "SampleTransaction")

        ' Must assign both transaction object and connection
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
              "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
            command.ExecuteNonQuery()
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")
        Catch e As Exception
            Try
                transaction.Rollback("SampleTransaction")
            Catch ex As SqlException
                If Not transaction.Connection Is Nothing Then
                    Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
                      " was encountered while attempting to roll back the transaction.")
                End If
            End Try

            Console.WriteLine("An exception of type " & e.GetType().ToString() & _
              "was encountered while inserting the data.")
            Console.WriteLine("Neither record was written to database.")
        End Try
    End Using
End Sub

注釈

このコマンドは、BEGIN TRANSACTION のSQL Server実装にマップされます。

パラメーターの値は、 transactionName メソッドの パラメーターに対するRollback後の 呼び出しと パラメーターSaveの呼び出しでsavePoint使用できます。

または Rollback メソッドを使用して、トランザクションを明示的にコミットまたはロールバックするCommit必要があります。 SQL Server トランザクション管理モデルが正しく実行されるようにするには、SQL Serverによって提供されるトランザクション管理モデルなど、他のトランザクション管理モデルを使用しないようにします。

Note

トランザクションがコミットまたはロールバックされると、トランザクションの分離レベルは、自動コミット モード (既定SQL Server) にある後続のすべてのコマンドに対して保持されます。 これにより、REPEATABLE READ の分離レベルが保持され、他のユーザーが行からロックされるなど、予期しない結果が生じる可能性があります。 分離レベルを既定 (READ COMMITTED) にリセットするには、Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ステートメントを実行するか、 ステートメントの直後に SqlTransaction.Commitを呼び出しますSqlConnection.BeginTransaction。 SQL Server分離レベルの詳細については、「トランザクション分離レベル」を参照してください。

SQL Server トランザクションの詳細については、「トランザクション (Transact-SQL)」を参照してください。

注意事項

クエリが大量のデータを返し、 をSqlException呼び出BeginTransactionすと、 がスローされます。これは、MARS を使用するときに、SQL Serverでは並列トランザクションが許可されないためです。 この問題を回避するには、リーダーを開く前に、常にトランザクションをコマンド、接続、またはその両方に関連付けます。

こちらもご覧ください

適用対象