Partager via


SqlConnection.BeginTransaction Méthode

Définition

Commence une transaction de base de données.

Surcharges

BeginTransaction()

Commence une transaction de base de données.

BeginTransaction(IsolationLevel)

Commence une transaction de base de données avec le niveau d’isolement spécifié.

BeginTransaction(String)

Commence une transaction de base de données avec le nom de transaction spécifié.

BeginTransaction(IsolationLevel, String)

Commence une transaction de base de données avec le niveau d'isolement et le nom de transaction spécifiés.

BeginTransaction()

Commence une transaction de base de données.

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

Retours

Objet représentant la nouvelle transaction.

Exceptions

Les transactions parallèles ne sont pas autorisées quand vous utilisez MARS (Multiple Active Result Sets).

Les transactions parallèles ne sont pas prises en charge.

Exemples

L’exemple suivant crée un SqlConnection et un SqlTransaction. Il montre également comment utiliser les BeginTransactionméthodes , a Commitet .Rollback

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

Remarques

Cette commande correspond à l’implémentation SQL Server de BEGIN TRANSACTION.

Vous devez explicitement valider ou restaurer la transaction à l’aide de la Commit méthode ou Rollback . Pour vous assurer que le fournisseur de données .NET Framework pour SQL Server modèle de gestion des transactions fonctionne correctement, évitez d’utiliser d’autres modèles de gestion des transactions, tels que celui fourni par SQL Server.

Notes

Si vous ne spécifiez pas de niveau d’isolation, le niveau d’isolation par défaut est utilisé. Pour spécifier un niveau d’isolation avec la BeginTransaction méthode, utilisez la surcharge qui prend le iso paramètre (BeginTransaction). Le niveau d’isolation défini pour une transaction persiste une fois la transaction terminée et jusqu’à ce que la connexion soit fermée ou supprimée. La définition du niveau d’isolation sur Instantané dans une base de données où le niveau d’isolation instantané n’est pas activé ne lève pas d’exception. La transaction se termine à l’aide du niveau d’isolation par défaut.

Attention

Si une transaction est démarrée et qu’une erreur de niveau 16 ou supérieur se produit sur le serveur, la transaction n’est pas restaurée tant que la Read méthode n’est pas appelée. Aucune exception n’est levée sur ExecuteReader.

Attention

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, un SqlException est levée, car SQL Server n’autorise pas les transactions parallèles lors de l’utilisation de MARS. Pour éviter ce problème, associez toujours une transaction à la commande, à la connexion ou aux deux avant que les lecteurs ne soient ouverts.

Pour plus d’informations sur les transactions SQL Server, consultez Transactions (Transact-SQL).

Voir aussi

S’applique à

BeginTransaction(IsolationLevel)

Commence une transaction de base de données avec le niveau d’isolement spécifié.

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

Paramètres

iso
IsolationLevel

Niveau d’isolement sous lequel la transaction doit s’exécuter.

Retours

Objet représentant la nouvelle transaction.

Exceptions

Les transactions parallèles ne sont pas autorisées quand vous utilisez MARS (Multiple Active Result Sets).

Les transactions parallèles ne sont pas prises en charge.

Exemples

L’exemple suivant crée un SqlConnection et un SqlTransaction. Il montre également comment utiliser les BeginTransactionméthodes , a Commitet .Rollback

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

Remarques

Cette commande correspond à l’implémentation SQL Server de BEGIN TRANSACTION.

Vous devez explicitement valider ou restaurer la transaction à l’aide de la Commit méthode ou Rollback . Pour vous assurer que le fournisseur de données .NET Framework pour SQL Server modèle de gestion des transactions fonctionne correctement, évitez d’utiliser d’autres modèles de gestion des transactions, tels que celui fourni par SQL Server.

Notes

Une fois qu’une transaction est validée ou restaurée, le niveau d’isolation de la transaction persiste pour toutes les commandes suivantes qui sont en mode de validation automatique (SQL Server valeur par défaut). Cela peut produire des résultats inattendus, tels qu’un niveau d’isolation de REPEATABLE READ persistant et verrouillant d’autres utilisateurs hors d’une ligne. Pour réinitialiser le niveau d’isolation par défaut (READ COMMITTED), exécutez l’instruction Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ou appelez SqlConnection.BeginTransaction suivi immédiatement de SqlTransaction.Commit. Pour plus d’informations sur les niveaux d’isolation SQL Server, consultez Niveaux d’isolation des transactions.

Pour plus d’informations sur les transactions SQL Server, consultez Transactions (Transact-SQL).

Attention

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, un SqlException est levée, car SQL Server n’autorise pas les transactions parallèles lors de l’utilisation de MARS. Pour éviter ce problème, associez toujours une transaction à la commande, à la connexion ou aux deux avant que les lecteurs ne soient ouverts.

Voir aussi

S’applique à

BeginTransaction(String)

Commence une transaction de base de données avec le nom de transaction spécifié.

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

Paramètres

transactionName
String

Nom de la transaction.

Retours

Objet représentant la nouvelle transaction.

Exceptions

Les transactions parallèles ne sont pas autorisées quand vous utilisez MARS (Multiple Active Result Sets).

Les transactions parallèles ne sont pas prises en charge.

Exemples

L’exemple suivant crée un SqlConnection et un SqlTransaction. Il montre également comment utiliser les BeginTransactionméthodes , a Commitet .Rollback

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

Remarques

Cette commande correspond à l’implémentation SQL Server de BEGIN TRANSACTION.

La longueur du transactionName paramètre ne doit pas dépasser 32 caractères ; sinon, une exception est levée.

La valeur dans le transactionName paramètre peut être utilisée dans les appels ultérieurs à Rollback et dans le savePoint paramètre de la Save méthode.

Vous devez explicitement valider ou restaurer la transaction à l’aide de la Commit méthode ou Rollback . Pour vous assurer que le fournisseur de données .NET Framework pour SQL Server modèle de gestion des transactions fonctionne correctement, évitez d’utiliser d’autres modèles de gestion des transactions, tels que celui fourni par SQL Server.

Pour plus d’informations sur les transactions SQL Server, consultez Transactions (Transact-SQL).

Attention

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, un SqlException est levée, car SQL Server n’autorise pas les transactions parallèles lors de l’utilisation de MARS. Pour éviter ce problème, associez toujours une transaction à la commande, à la connexion ou aux deux avant que les lecteurs ne soient ouverts.

Voir aussi

S’applique à

BeginTransaction(IsolationLevel, String)

Commence une transaction de base de données avec le niveau d'isolement et le nom de transaction spécifiés.

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

Paramètres

iso
IsolationLevel

Niveau d’isolement sous lequel la transaction doit s’exécuter.

transactionName
String

Nom de la transaction.

Retours

Objet représentant la nouvelle transaction.

Exceptions

Les transactions parallèles ne sont pas autorisées quand vous utilisez MARS (Multiple Active Result Sets).

Les transactions parallèles ne sont pas prises en charge.

Exemples

L’exemple suivant crée un SqlConnection et un SqlTransaction. Il montre également comment utiliser les BeginTransactionméthodes , a Commitet .Rollback

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

Remarques

Cette commande correspond à l’implémentation SQL Server de BEGIN TRANSACTION.

La valeur dans le transactionName paramètre peut être utilisée dans les appels ultérieurs à Rollback et dans le savePoint paramètre de la Save méthode.

Vous devez explicitement valider ou restaurer la transaction à l’aide de la Commit méthode ou Rollback . Pour vous assurer que le modèle de gestion des transactions SQL Server fonctionne correctement, évitez d’utiliser d’autres modèles de gestion des transactions, tels que celui fourni par SQL Server.

Notes

Une fois qu’une transaction est validée ou restaurée, le niveau d’isolation de la transaction persiste pour toutes les commandes suivantes qui sont en mode de validation automatique (SQL Server valeur par défaut). Cela peut produire des résultats inattendus, tels qu’un niveau d’isolation de REPEATABLE READ persistant et verrouillant d’autres utilisateurs hors d’une ligne. Pour réinitialiser le niveau d’isolation par défaut (READ COMMITTED), exécutez l’instruction Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ou appelez SqlConnection.BeginTransaction suivi immédiatement de SqlTransaction.Commit. Pour plus d’informations sur les niveaux d’isolation SQL Server, consultez Niveaux d’isolation des transactions.

Pour plus d’informations sur les transactions SQL Server, consultez Transactions (Transact-SQL).

Attention

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, un SqlException est levée, car SQL Server n’autorise pas les transactions parallèles lors de l’utilisation de MARS. Pour éviter ce problème, associez toujours une transaction à la commande, à la connexion ou aux deux avant que les lecteurs ne soient ouverts.

Voir aussi

S’applique à