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

VB.NET Discussion :

Accés concurentiel en VB.NET


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut Accés concurentiel en VB.NET
    Bonjour,

    Comment peut-on gérer l'accès conurentiel en VB.NET? sur Msdn ce n'est pas très clair pour moi.
    Enfin, mon application (Vb.net/Sql Server) va être utilisée par plusieurs utilisateurs, comment je vais faire pour gérer les accès pessimite et Optimiste?

    Merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    je comprends pas trop comment il peut y avoir concurrence, je crois qu'il n'y plus de curseurs comme en vb6 ou ca pouvait créer des problèmes

    il me semble que vb.net ne travaille qu'en mode déconnecté donc il rappatrie les données et c'est tout

    de plus moi quand j'ai une modification à faire dans la base, je la fais par rapport à la clé et non pas par rapport à l'ancienne valeur (ni par rapport à la clé ET en vérifiant si l'ancienne valeur est la même)
    c'est donc la dernière modif qui est prise en compte, et mes clés de changent jamais de valeur ...

    donc je ne comprends pas trop ton soucis
    surtout si ado.net ne gère pas tout ca en travaillant simplement en mode déconnecté
    enfin c'est un point sur lequel j'ai peut etre tord par contre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Merci bien sperot pour l'explication.

    Moi je ne comprends pas non plus vu que c'est un mode déconnecté, et j'ai déjà eu des erreur de violation d'accès concurentiel..


    D'autre par, d'après msdn :

    Toutefois, [B]le contrôle d'accès concurrentiel pessimiste ne peut pas être utilisé dans une architecture déconnectée...
    Qu'est ce que ca peut arriver quand deux utilisateurs se connectent en même temps et tente de modifier le même enregistrement? (je n'ai pas encore tester la connexion de plusieurs utilisateurs à l'application , mais c'est la prochaine tâche que j'ai à réaliser ).
    Et qu'est ce que tu en pense si je gère les accès avec ADO au lieu de ADO.NET, ca sera une bonne idée ou plutôt petre de temps?

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    normalement faire 2 update en meme temps, c'est sql server après qui gère ca, et c'est peu probable que ca plante (hormis gros traitement et deadlock)

    c'est avec des dataset que tu as eut des accès concurrentiels ? car je connais pas trop le dataset ... ca se trouve il est pas en déconnecté

    sinon pour ado, ca serait à mon avis un peu moins performant, demanderait plus de code, et puis ca fait pas très propres, c'est comme faire construire une maison neuve et mettre du papier peint marron avec des grosses fleurs ...
    c'est pas la meme génération
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    grave! pour la comparaison!
    Ok, je vais m'en défaire ce ADO classique.

    Oui, c'est avec le DataSet que j'ai déjà eu l'erreur, tu utilise quoi sinon?
    C'est vrai que les DataSet's ne me font pas sauter de joie, mais c'est la prmiere chose que j'ai trouvé abordable pour me lancer vu le temps limité que j'ai.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    moi j'utilise le sqldatareader et le sqlcommand

    le sqldatareader permet juste d'extraire les données par contre

    je n'utilise aucun databinding, je sais meme pas comment ca marche
    j'ai essayer un peu le dataset dans un datagridview, j'ai meme pas trouvé pour que les modifs dans le datagridview soit répercutées sur la DB
    enfin je pensais que c'était plus simple


    enfin là ou je bosse on a développé un datagrid pratique
    on lui donne une requete et il se débrouille pour faire l'affichage
    quand on double clic sur case, ca ouvre un popup de saisie et on créé la requete d'update qui va avec, le sqldatareader permet de faire getschema et on a les infos de types, les clés etc...

    en bref il fait environ 5k lignes mais maintenant on en pose partout et ca se débrouille, sur une appli multi utilisateurs

    liste non exhaustive de ce qu'il fait :
    - remplissage semi asynchrone ultra rapide
    - possibilité d'afficher des images
    - bouton modifier
    - bouton supprimer
    - bouton mettre à jour la grille par rapport à la DB
    - bouton imprimer
    - colorisation des lignes selon la valeur d'une colonne
    - filtre multicritère sans repasser par la base
    - tri multicolonne sans repasser par la base
    etc ...

    si le datagridview de microsoft était comme ca, ca aurait simplifié la vie de pas mal de monde

    meme sur quelque chose d'aussi complet que le framework, il est encore possible de dire qu'il y a des choses pas assez poussées ^^

    le datagridview par exemple, c'est expliqué dans l'aide que pour plusieurs milliers de lignes, il va ramer à fond, qu'il faut alors mettre virtualmode à true et gérer soit même l'affichage des données à l'intérieur
    chose qu'on a faite du coup, mais ils auraient pu le faire au lieu de le dire ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Hello,

    Ok,Je vais donc juste terminer une phase (que j'ai déjà commencé avec les DataSet) et essayer de faire le reste avec DataReader et SqlCommand.
    Sinon pour refector, je ne comprends pas bien ce que tu veux dire.

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    je disais de voir avec reflector si le dataadapter utilise un datareader ou un autre mode d'accès aux données


    enfin je viens de regarder, le daadapter remplit le dataset avec un datareader ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Merci pour les explications précieuses sperot.

  10. #10
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Tu utilise une colonne horodateur pour gérer les violations d'accès pouvants survenir lors d'un accès optimiste?

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    je ne gère rien ni en optimiste, ni en pessimiste
    je n'ai pas de violation d'accès ...
    je n'utilise pas de dataset ni de dataadapter

    si tu arrives à reproduire ton exception de violation d'accès, je suis curieux d'avoir les détails de cette erreur (erreur qui vient de sql ou de .net)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Adjugé
    Sinon, tiens ce lien si jamais tu veux jetter un coup d'oeil sur la gestion de violation d'accès en mode optimiste.

    http://msdn.microsoft.com/fr-fr/libr...cz(VS.80).aspx

  13. #13
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    si j'ai bien compris, optimiste c'est du vent, tout passe sauf si on vérifie et qu'on se créé les erreurs soit meme

    et pas le que pessimisme existe sur ado.net


    bref nous on est très optimiste, quand quelqu'un modifie une valeur, ca nous dérange pas qu'il ne sache pas que quelqu'un avait déjà modifié

    les données sensibles on les rafrachis toutes les demi seconde, ca pare le problème en partie


    sinon il est aussi possible d'etre averti des modifs
    pour ca, soit les clients parlent entre eux par socket pour dire qu'ils ont modifié telle table ou tel machin
    ou sinon à partir de sql server 2005 (mais pas sur les versions express) il y a les notifications, une option du datareader qui appelle un evenement si le select qui avait été appelé devrait retourner un jeu d'enregistrement différent
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Tu as un tuto palrant de la manière que tu utilise?

  15. #15
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Je comprends en fait pourquoi tu n'a pas d'erreur de violation d'accès, certainement c'est parceque tu utilise le SqlCommand où le UPDATE et DELETE sont générés automatiquement.

    msdn :
    ..., l'instruction UPDATE ou DELETE générée automatiquement contient une clause WHERE spécifiant qu'une ligne n'est mise à jour que si elle contient toutes les valeurs d'origine et n'a pas été supprimée de la source de données. Cela permet d'éviter que de nouvelles données ne soient remplacées. Quand une mise à jour générée automatiquement tente de mettre à jour une ligne qui a été supprimée ou qui ne contient pas les valeurs d'origine qui se trouvent dans l'objet DataSet, la commande n'affecte pas d'enregistrement et un objet DBConcurrencyException est levé.

    Si vous souhaitez que les instructions UPDATE ou DELETE soient exécutées indépendamment des valeurs d'origine, vous devez explicitement définir UpdateCommand pour le DataAdapter et ne pas compter sur la génération automatique de commandes.
    Donc tu n'est pas obligé faire une gestion manuelle avec une colonne horodateur ni avec une clause where dans le DataAdapter (pour comparer les valeurs modifiées au originales).

  16. #16
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    le but est de savoir si tu as besoin de savoir ou non s'il y a des différences
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Autre chose que je ne comprends pas bien.
    Tu dis que normalement il doit pas y avoir erreur de violation vu que ADO.NET fonctionne en mode déconnecté, alors que le DataReader fonctionne en mode connecté, enfin, c'est pas clair pour moi.

  18. #18
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    le datareader est en mode déconnecté

    enfin ce que je veux dire c'est qu'il n'y a pas de curseur comme à l'époque qui reste ouvert

    on lit les données (c'est rapide et un select pose rarement des verrous sur une base sql)
    on les stocks quelquepart
    puis on ferme la connexion


    à l'époque de vb6, les recordset pouvaient rester connecter à la base via un curseur qui posait un verrou de lecture



    enfin à priori tout ado.net serait en mode déconnecté
    l'histoire du dataset qui trouve des erreurs de violation d'accès, c'est pas du tout géré par la base de données mais c'est juste le dataset qui déclenche ca
    au lieu de faire juste une requete d'update pour faire une modif, il fait une requete (type exists ou select à mon avis) pour vérifier que ce qu'il y a dans la base est egal à ce qu'il avait avant, si c'est le cas il fait la requete d'update, si c'est pas le cas il faut un throw exception
    (donc au passage ca doit etre un poil plus lent d'ailleurs)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Je pense qu'il faut mettre résolu . Apparement je n'ai plus rien à dire à moins que si le DataSet me sort encore l'une de ses miracles, sinon, cela me suffit pour bien comprendre le fonctionnement des accès.
    Merci sperot .

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

Discussions similaires

  1. Accès concurentiel en ASP.Net MVC
    Par worm83 dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 13/04/2010, 15h44
  2. [vb 2005]Problème de violation d'accès concurentiel
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/06/2006, 17h14
  3. Réponses: 8
    Dernier message: 04/05/2006, 21h25
  4. [VB.Net] - Acces à Excel depuis VB.Net
    Par toninonino dans le forum Windows Forms
    Réponses: 14
    Dernier message: 30/09/2005, 11h12
  5. problème d'acces concurentiel à un fichier
    Par Theoden dans le forum MFC
    Réponses: 2
    Dernier message: 04/03/2004, 09h49

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