Exécution d'une transaction à l'aide de ADO.NET
Vous pouvez commencer, valider ou annuler une transaction en utilisant les objets Connection et Transaction. La procédure suivante permet d'opérer une transaction.
Pour effectuer une transaction
- Appelez la méthode BeginTransaction de l'objet Connection pour marquer le début de la transaction. La méthode BeginTransaction retourne une référence à Transaction. Cette référence est affectée aux objets Command inscrits dans la transaction.
- Assignez l'objet Transaction à la propriété Transaction du Command à exécuter. Si Command est exécuté sur un Connection avec un Transaction actif et si l'objet Transaction n'a pas été assigné à la propriété Transaction de Command, une exception est levée.
- Exécutez les commandes requises.
- Appelez la méthode Commit de l'objet Transaction pour terminer la transaction ou la méthode Rollback pour l'annuler.
L'exemple de code suivant illustre la logique transactionnelle utilisant ADO.NET avec Microsoft® SQL Server™.
Dim myConnection As SqlConnection = New SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;")
myConnection.Open()
' Start a local transaction.
Dim myTrans As SqlTransaction = myConnection.BeginTransaction()
' Enlist the command in the current transaction.
Dim myCommand As SqlCommand = myConnection.CreateCommand()
myCommand.Transaction = myTrans
Try
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As SqlException
If Not myTrans.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.")
Finally
myConnection.Close()
End Try
[C#]
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();
// Start a local transaction.
SqlTransaction myTrans = myConnection.BeginTransaction();
// Enlist the command in the current transaction.
SqlCommand myCommand = myConnection.CreateCommand();
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine("Both records are written to database.");
}
catch(Exception e)
{
try
{
myTrans.Rollback();
}
catch (SqlException ex)
{
if (myTrans.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.");
}
finally
{
myConnection.Close();
}
Voir aussi
Utilisation des fournisseurs de données .NET Framework pour l'accès aux données | OleDbConnection, classe | OleDbTransaction, classe | SqlConnection, classe | SqlTransaction, classe | OdbcConnection, classe | OdbcTransaction, classe