SqlConnection.BeginTransaction Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- Transactions et concurrence
- Connexion à une source de données dans ADO.NET
- SQL Server et ADO.NET
- Vue d'ensemble d’ADO.NET
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
- Transactions (ADO.NET)
- Connexion à une source de données (ADO.NET)
- Utilisation du fournisseur de données .NET Framework pour SQL Server
- Vue d'ensemble d’ADO.NET
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
- Transactions (ADO.NET)
- Connexion à une source de données (ADO.NET)
- Utilisation du fournisseur de données .NET Framework pour SQL Server
- Vue d'ensemble d’ADO.NET
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
- Transactions (ADO.NET)
- Connexion à une source de données (ADO.NET)
- Utilisation du fournisseur de données .NET Framework pour SQL Server
- Vue d'ensemble d’ADO.NET