Partager via


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

  1. 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.
  2. 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.
  3. Exécutez les commandes requises.
  4. 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