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

Windows Forms Discussion :

[VB.NET][2.0]traiter une Concurrency exception


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut [VB.NET][2.0]traiter une Concurrency exception
    Bonjour à tous,

    Dans ma quête de trouver des moyens pour mettre à jour ma base Access via mon dataSet non typé, j'ai trouvé sur le forum le petit bout de code suivant et j'en profite pour remercier son auteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub MajBase(ByVal Adapter As OleDbDataAdapter, ByVal table As String)
            Connection.Open()
            ' Création CommandBuilder 
            '(genere automatiquement l'update entre le dataSet et la base de donnée
            Dim CmdBuild As OleDbCommandBuilder
            CmdBuild = New OleDb.OleDbCommandBuilder(Adapter)
            Adapter.UpdateCommand = CmdBuild.GetUpdateCommand()
            Adapter.Update(DtSet, table)
            Connection.Close()
        End Sub
    Lorsque je fais une modification d'une donnée dans mon application (dans le dataset donc), et que je m'amuse à aller changer directement dans la table access ce même enregistrement (un peu comme si un autre utilisateur avait modifié cette information via une autre instance de mon application), je recois le message suivant:

    An unhandled exception of type 'System.Data.DBConcurrencyException' occurred in System.Data.dll

    Additional information: Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.
    Ce qui en soit me parait normal, bien sûr il faut que je mette mon code dans un Try Catch et que je prévienne l'utilisateur que son information a été changée par ailleurs et normalement je dois aussi lui demander si il veut annuler sa modification ou écraser la modification de l'autre.

    Si il choisit d'écraser, comment faire ?

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    soit en créant une commande n'utilisant que la clé primaire comme critère, soit en créant un CommandBuilder dont la propriété ConflictOption vaut OverwriteChanges

    Cependant, attention à l'écrasement, c'est un risque de fausser les données si les implications n'ont pas été murement réfléchies

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci, je ne vois pas bien comment créer une commande qui n'utilise que la clé primaire donc j'ai choisi ta deuxième solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Try
                Adapter.Update(DtSet, table)
            Catch ex As Exception
                MsgBox(ex.GetType.ToString)
                CmdBuild.ConflictOption = ConflictOption.OverwriteChanges
                Adapter.Update(DtSet, table)
            End Try
    je dois bien sûr encore adapter le message mais sinon ça fonctionne super !

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET]Lancement auto d'une appli
    Par smyley dans le forum Windows Forms
    Réponses: 14
    Dernier message: 25/04/2006, 08h50
  2. Réponses: 9
    Dernier message: 31/05/2005, 10h05
  3. [VB.NET] copier coller d'une valeur
    Par mic56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/06/2004, 11h43
  4. [VB.NET] Activer procédure d'une form à partir d'une autre
    Par ricil78 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/05/2004, 14h52
  5. Réponses: 5
    Dernier message: 22/12/2003, 14h18

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