IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[VB.NET] Un RollBack qui ne marche pas!


Sujet :

Accès aux données

  1. #1
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut [VB.NET] Un RollBack qui ne marche pas!
    Bonjour tout le monde,
    j'ai une boucle qui insérer des données dans une table ( sous DB2), cette insertion doit se faire d'une façon transactionnelle. j'ai procéde comme suit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    PrivateSub saveDF(ByVal ds As DataSet, ByVal ReferenceDF AsString)
     
    Dim cntByDF AsInteger
    cntByDF = ds.Tables(0).Rows.Count
    Dim sSQL AsString
    Dim transact As OleDb.OleDbTransaction
    Dim cn2 AsNew OleDb.OleDbConnection
    Dim cmd2 AsNew OleDb.OleDbCommand
     
    If cn2.State = ConnectionState.Closed Then
    cn2.ConnectionString = chaineConnexion(userI5, pwdI5)
    cn2.Open()
    
    EndIf
    transact = cn2.BeginTransaction
    cmd2.Transaction = transact
    cmd2.Connection = cn2
    Try
     
    For j AsInteger = 0 To cntByDF - 1
    sSQL = " INSERT INTO DF_DUPLIC VALUES " & _
    " ('85',current date,'" & ReferenceDF & "','" & ds.Tables(0).Rows(j).Item("champ1") & "', " & _
    " '" & ds.Tables(0).Rows(j).Item("champ2") & "', " & _
    " '', " & _
    " '" & ds.Tables(0).Rows(j).Item("champ3") & "', " & _
    " '" & ds.Tables(0).Rows(j).Item("champ4") & "', " & _
    " '" & ds.Tables(0).Rows(j).Item("champ5") & "', " & _
    " '" & moduleName & "', " & _
    " '" & ds.Tables(0).Rows(j).Item("champ6") & "' " & _
    " )"
    cmd2.CommandText = sSQL
    cmd2.ExecuteNonQuery()
     
    Next
    transact.Commit()
    Catch ex As Exception
    transact.Rollback()
    MsgBox(ex.Message)
    Finally
    cn2.Close()
    EndTry
    EndSub
    

    ainsi, je veux que lorsque cette insertion généré un doublon de clé que la transaction s'annulle. et c'est mon cas. vu que dans ma table DF_DUPLIC j'ai une clé, mais à priori on ne sait pas si les données contenu dans le DataSet génére ces doublons ou pas! c'est pour ça que j'ai mis dans le catch un RollBack pour que la transaction soit annullées dans ce cas, mais apparement j'ai constaté que mon premier enregistrement est inséré dans ma table et lors du prochain incrément de la boucle une execption est levée indiquant comme quoi il y a doublon et dans après débougage je rentre dans le CATCH et ça passe par le RollBack mais quand je regarde dans la base de données je trouve que le premier enregistrement existe bien ( çàd qu'il n'était pas annulé!) comment ça se fait! je ne sais pas!!
    quelqu'un a t-il une idée?
    Merci d'avanace

  2. #2
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Pour ma part j'avoue, là, je suis perplexe ! (mais bon, faut dire, je ne suis pas un expert).

    J'aurais codé ça comme toi.

    En désespoir de cause, j'aurais testé d'inverser ces deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmd2.Transaction = transact
    cmd2.Connection = cn2
    ... mais sans y croire vraiment.

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/06/2010, 14h11
  2. [VB.NET]Control.CreateControl qui ne marche pas
    Par noogatix dans le forum Windows Forms
    Réponses: 13
    Dernier message: 16/06/2006, 16h23
  3. Iptables configuration qui ne marche pas....
    Par The_Nail dans le forum Sécurité
    Réponses: 7
    Dernier message: 03/02/2004, 14h27
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo