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

SqlTransaction

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 BeginTransaction Commit méthodes, et 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();
            }
            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("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 mappe à l’implémentation SQL Server de BEGIN TRANSACTION.

Vous devez valider ou restaurer explicitement la transaction à l’aide de la Commit Rollback méthode ou. Pour vous assurer que le .NET Framework Fournisseur de données pour le modèle de gestion des transactions SQL Server s’exécute correctement, évitez d’utiliser d’autres modèles de gestion des transactions, comme 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 à l’aide de 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 snapshot dans une base de données où le niveau d’isolement d’instantané n’est pas activé ne lève pas d’exception. La transaction se termine en utilisant le niveau d’isolation par défaut.

Attention

Si une transaction est démarrée et qu’une erreur de niveau 16 ou plus 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 d’appels BeginTransaction , une SqlException exception 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 l’ouverture des lecteurs.

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

SqlTransaction

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 BeginTransaction Commit méthodes, et 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 mappe à l’implémentation SQL Server de BEGIN TRANSACTION.

Vous devez valider ou restaurer explicitement la transaction à l’aide de la Commit Rollback méthode ou. Pour vous assurer que le .NET Framework Fournisseur de données pour le modèle de gestion des transactions SQL Server s’exécute correctement, évitez d’utiliser d’autres modèles de gestion des transactions, comme 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 en mode de validation automatique (valeur par défaut SQL Server). Cela peut produire des résultats inattendus, comme un niveau d’isolation de lecture renouvelable et le verrouillage d’autres utilisateurs en dehors d’une ligne. Pour rétablir la valeur par défaut du niveau d’isolement (READ COMMITTED), exécutez l’instruction Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED, ou appelez-le SqlConnection.BeginTransaction suivi immédiatement par SqlTransaction.Commit . Pour plus d’informations sur les niveaux d’isolation de 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 d’appels BeginTransaction , une SqlException exception 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 l’ouverture des lecteurs.

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

SqlTransaction

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 BeginTransaction Commit méthodes, et 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();
            }
            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()

            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 mappe à l’implémentation SQL Server de BEGIN TRANSACTION.

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

La valeur du 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 valider ou restaurer explicitement la transaction à l’aide de la Commit Rollback méthode ou. Pour vous assurer que le .NET Framework Fournisseur de données pour le modèle de gestion des transactions SQL Server s’exécute correctement, évitez d’utiliser d’autres modèles de gestion des transactions, comme 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 d’appels BeginTransaction , une SqlException exception 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 l’ouverture des lecteurs.

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

SqlTransaction

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 BeginTransaction Commit méthodes, et 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();
            }
            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()
            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 mappe à l’implémentation SQL Server de BEGIN TRANSACTION.

La valeur du 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 valider ou restaurer explicitement la transaction à l’aide de la Commit Rollback méthode ou. Pour vous assurer que le modèle de gestion des transactions SQL Server s’exécute correctement, évitez d’utiliser d’autres modèles de gestion des transactions, comme 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 en mode de validation automatique (valeur par défaut SQL Server). Cela peut produire des résultats inattendus, comme un niveau d’isolation de lecture renouvelable et le verrouillage d’autres utilisateurs en dehors d’une ligne. Pour rétablir la valeur par défaut du niveau d’isolement (READ COMMITTED), exécutez l’instruction Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED, ou appelez-le SqlConnection.BeginTransaction suivi immédiatement par SqlTransaction.Commit . Pour plus d’informations sur les niveaux d’isolation de 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 d’appels BeginTransaction , une SqlException exception 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 l’ouverture des lecteurs.

Voir aussi

S’applique à