SqlConnection.BeginTransaction Méthode

Définition

Démarre une transaction de base de données.

Surcharges

Nom Description
BeginTransaction()

Démarre une transaction de base de données.

BeginTransaction(IsolationLevel)

Démarre une transaction de base de données avec le niveau d’isolation spécifié.

BeginTransaction(String)

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

BeginTransaction(IsolationLevel, String)

Démarre une transaction de base de données avec le niveau d’isolation et le nom de transaction spécifiés.

BeginTransaction()

Démarre une transaction de base de données.

public:
 System::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public System.Data.SqlClient.SqlTransaction BeginTransaction();
member this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
override 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 lors de l’utilisation de plusieurs jeux de résultats actifs (MARS).

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 et Rollback les Commitméthodes.

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

Vous devez valider ou restaurer explicitement la transaction à l’aide de la ou Rollback de la Commit méthode. Pour vous assurer que l’infrastructure .NET Fournisseur de données 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.

Note

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 d’instantané n’est pas activé ne lève pas d’exception. La transaction se termine à l’aide du niveau d’isolation par défaut.

Caution

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

Caution

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, une 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 les 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)

Démarre une transaction de base de données avec le niveau d’isolation spécifié.

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

Paramètres

iso
IsolationLevel

Niveau d’isolation 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 lors de l’utilisation de plusieurs jeux de résultats actifs (MARS).

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 et Rollback les Commitméthodes.

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

Vous devez valider ou restaurer explicitement la transaction à l’aide de la ou Rollback de la Commit méthode. Pour vous assurer que l’infrastructure .NET Fournisseur de données 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.

Note

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 (le SQL Server par défaut). Cela peut produire des résultats inattendus, tels qu’un niveau d’isolation de LA LECTURE REPEATABLE persistante et le verrouillage 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 par SqlTransaction.Commit. Pour plus d’informations sur les niveaux d’isolation SQL Server, consultez Transaction Isolation Levels.

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

Caution

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, une 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 les deux avant l’ouverture des lecteurs.

Voir aussi

S’applique à

BeginTransaction(String)

Démarre 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);
member this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
override 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 lors de l’utilisation de plusieurs jeux de résultats actifs (MARS).

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 et Rollback les Commitméthodes.

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 est mappée à 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 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 ou Rollback de la Commit méthode. Pour vous assurer que l’infrastructure .NET Fournisseur de données 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).

Caution

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, une 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 les deux avant l’ouverture des lecteurs.

Voir aussi

S’applique à

BeginTransaction(IsolationLevel, String)

Démarre une transaction de base de données avec le niveau d’isolation 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);
member this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
override 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’isolation 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 lors de l’utilisation de plusieurs jeux de résultats actifs (MARS).

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 et Rollback les Commitméthodes.

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 est mappée à 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 ou Rollback de la Commit méthode. 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.

Note

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 (le SQL Server par défaut). Cela peut produire des résultats inattendus, tels qu’un niveau d’isolation de LA LECTURE REPEATABLE persistante et le verrouillage 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 par SqlTransaction.Commit. Pour plus d’informations sur les niveaux d’isolation SQL Server, consultez Transaction Isolation Levels.

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

Caution

Lorsque votre requête retourne une grande quantité de données et appelle BeginTransaction, une 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 les deux avant l’ouverture des lecteurs.

Voir aussi

S’applique à