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 :

Les transactions, comment les gérer?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Par défaut Les transactions, comment les gérer?
    Bonjour

    les transactions jouent un rôle important parce qu'elles permettent de protéger homogénéité des données.
    est ce qu'il faut créer à chaque appel d'une requête de création ou de manipulation des données, un objet SqlTransaction et l'attacher à l'objet Sqlcommande ou DataReader, c'est bien cela? et après l’exécution de la requête j'applique commit sur la transaction.

    c'est correct?
    est ce que vous pourriez me donner un exemple de select et de insert?

    Merci

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Tu as un exemple d'utilisation sur MSDN
    http://msdn.microsoft.com/fr-fr/libr...ansaction.aspx

    Une autre façon de faire est d'utiliser TransactionScope
    http://msdn.microsoft.com/fr-fr/libr...tionscope.aspx

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    les transactions ne sont pas utiles tout le temps
    sur les select c'est inutile
    sur une requete unique aussi

    si tu fais "update machin"
    soit tout est update soit rien, donc faire une transaction ne sert à rien
    par contre si tu mets plusieurs requetes de modifications (insert/update/delete) dans un seul commandtext, ou que tu executes plusieurs requetes de modification sur le même objet connection, ca peut etre utile si tu veux etre sur que toutes les requetes agissent ou aucune
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre éclairé Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Par défaut
    d'accord,
    par exemple je fais une insertion, et ensuite je veux récupérer l'identifiant de la ligne insérée, j'ai pensé à faire une transaction pour l'insertion et ensuite après commit je récupère l'identifiant.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Citation Envoyé par spring.time Voir le message
    d'accord,
    par exemple je fais une insertion, et ensuite je veux récupérer l'identifiant de la ligne insérée, j'ai pensé à faire une transaction pour l'insertion et ensuite après commit je récupère l'identifiant.
    Dans ce cas une transaction est inutile, la commande est exécuté avec la méthode ExecuteNonQuery qui renvoie le nombre de ligne [Edit] impactées [/Edit] (dans ton cas 1) si en résultat tu obtients 1 (la requête insertion s'est bien passé) tu peux récupérer l'identifiant.

    Citation Envoyé par spring.time Voir le message
    ...
    les transactions jouent un rôle important parce qu'elles permettent de protéger homogénéité des données.
    ...
    Tout à fait.

    Prenons un exemple.

    Un client a passé une commande de 10 types de produits différents avec une certaines quantités par produits. (commande enregistré dans la base de données) ok.

    Le lendemain il rappele et change sa commande : il ne veut plus 2 types de produits, modifier la quantité pour 4 types de produits, et commander 3 autres nouveaux type de produits.
    Dans ce cas il faut faire une transaction qui comprendra 2 delete(s), 4 update(s) et 3 insert(s)
    Si tout ce passe bien commit (tout est enregistré).
    S'il y a un souci (un update provoque une erreur par exemple) rollback : la base reste comme à l'origine.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    Citation Envoyé par spring.time Voir le message
    d'accord,
    par exemple je fais une insertion, et ensuite je veux récupérer l'identifiant de la ligne insérée, j'ai pensé à faire une transaction pour l'insertion et ensuite après commit je récupère l'identifiant.

    dans le commandtext il y aura
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into ...
    select scope_identity()
    puis un executereader (ou scalar)
    la transaction n'est pas forcément utile car si l'insert plante la transaction n'est pas utile, si l'insert passe et que le select passe non plus
    reste le cas ou l'insert passe et pas le select (moins de 0.0001% de chance que ca arrive je pense), si l'id est utilisé côté .net, c'est à toi de décider si tu veux annuler l'insert ou ne pas exécuter la suite du code .net

    c'est réellement s'il y a plusieurs insert/update/delete à la suite que les transactions sont en général utilisées
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/07/2013, 12h04
  2. [rolap/molap/holap] Comment les distinguer et les utiliser ?
    Par Melvine dans le forum Conception/Modélisation
    Réponses: 7
    Dernier message: 18/03/2008, 23h03
  3. Controler les insertions avec les transactions
    Par robocop2776 dans le forum VBA Access
    Réponses: 4
    Dernier message: 13/05/2007, 14h13
  4. [URL]comment les construire pour les images?
    Par fabszn dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 12/09/2006, 14h10

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