none
Exécuter une requête dans une transaction RRS feed

  • Discussion générale

  • Pour expliquer ce qu'est une transaction, il n'y a pas meilleur exemple qu'une transaction bancaire. Imaginez que vous faites un virement de 100 € d'un compte A vers un compte B :

    1 ère instruction : Compte A - 100 €
    2 ème instruction : Compte B + 100 €

    Malheureusement, la transaction est interrompue après la première instruction ... Résultat : Vous avez perdu 100 €

    C'est entre autres pour éviter ce genre de désagrément qu'il existe l'objet Transaction.

    Exemple :
    Nous voulons augmenter 2 employés mais annuler l'ensemble des augmentations si l'une d'entre elles échoue (cet exemple n'a pas spécialement de sens mais il montre comment utiliser l'objet OracleTransaction )  

    L'objet Transaction possède 2 méthodes Commit / Rollback qui vont nous être utiles pour valider ou pas la transaction.

    Dim MaConnexion As OracleConnection = New OracleConnection(MaChaineDeConnection)
    MaConnexion.Open()
    Dim MaTransaction As OracleTransaction = MaConnexion.BeginTransaction
    Dim MaRequete As String = "update EMPLOYEES " + _
    "set SALARY = 18000 " + _
    "where EMPLOYEE_ID = 80"

    Dim MaCommande As New OracleCommand(MaRequete, MaConnexion, MaTransaction)

    Dim NbrLigneMAJ As Integer = MaCommande.ExecuteNonQuery

    MaRequete = "update EMPLOYEES " + _
    "set SALARY = 25000" + _
    "where EMPLOYEE_ID = 100"

    NbrLigneMAJ += MaCommande.ExecuteNonQuery()

    If NbrLigneMAJ = 2 Then
      Console.WriteLine("Augmentation effectuée")
      MaTransaction.Commit()
    Else
      Console.WriteLine("Problème rencontré")
      MaTransaction.Rollback()
    End If

    MaConnexion.Close()
    samedi 9 septembre 2006 20:24