Partager via


SqlConnection.BeginTransaction Méthode

Définition

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:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction ();
override this.BeginTransaction : unit -> Microsoft.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 , et CommitRollback .

using Microsoft.Data.SqlClient;

namespace Transaction1CS
{
    class Program
    {
        static void Main()
        {
            string connectionString =
                "Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
            ExecuteSqlTransaction(connectionString);
            Console.ReadLine();
        }
        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);
                    }
                }
            }
        }
    }
}

Remarques

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

Vous devez valider ou restaurer explicitement 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 accepte 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. Le fait de définir le niveau d’isolation sur Instantané dans une base de données où le niveau d’isolation de l’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).

S’applique à

BeginTransaction(IsolationLevel)

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

public:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso);
override this.BeginTransaction : System.Data.IsolationLevel -> Microsoft.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 , et CommitRollback .

using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString =
            "Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
        ExecuteSqlTransaction(connectionString);
        Console.ReadLine();
    }
    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.");
            }
        }
    }
}

Remarques

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

Vous devez valider ou restaurer explicitement 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établir 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 SQL Server niveaux d’isolation, 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.

S’applique à

BeginTransaction(String)

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

public:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::String ^ transactionName);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (string transactionName);
override this.BeginTransaction : string -> Microsoft.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 , et CommitRollback .

using Microsoft.Data.SqlClient;

namespace Transaction1CS
{
    class Program
    {
        static void Main()
        {
            string connectionString =
                "Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
            ExecuteSqlTransaction(connectionString);
            Console.ReadLine();
        }
        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);
                    }
                }
            }
        }
    }
}

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

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:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso, System::String ^ transactionName);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso, string transactionName);
override this.BeginTransaction : System.Data.IsolationLevel * string -> Microsoft.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 , et CommitRollback .

using Microsoft.Data.SqlClient;

namespace Transaction1CS
{
    class Program
    {
        static void Main()
        {
            string connectionString =
                "Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
            ExecuteSqlTransaction(connectionString);
            Console.ReadLine();
        }
        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.");
                }
            }
        }
    }
}

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 valider ou restaurer explicitement la transaction à l’aide de la Commit méthode ou Rollback . Pour vous assurer que le 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établir 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 SQL Server niveaux d’isolation, 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.

S’applique à