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 :

[VB.NET/Sql Server] Comment enregistrer un Lot ?


Sujet :

VB.NET

  1. #1
    Membre actif 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
    Points : 295
    Points
    295
    Par défaut [VB.NET/Sql Server] Comment enregistrer un Lot ?
    Bonjour,

    J'ai un ecran bien compliqué qui contient 9 onglets, et chaque onglet est bien bouré d'informations dans des grilles, zones de textes, combo...

    J'ai un bouton Enregistrer, qui prends toutes les données des onglets et les mets à jours, j'ai des INSERT, des UPDATES, des Deletes qui se font dans SQL Server lors de l'enregisterement.

    Le problème c que parfois quand le programme plante à cause d'une erreur ou autres pendant l'enregistrement, ya des données qui son enregistré yonna non, quand l'enregistrement passe sans probleme c nickel, mais quand ca coince qqpart ca met le bordel dans la base de données qui est utilisé par plusieurs autres programme.

    Comment faire pour enregistrer ou non par lot, en cas de probleme yaura rien qui va se passer ?


    Merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 176
    Points : 25 118
    Points
    25 118
    Par défaut
    question qui aurait peut eut sa place dans le forum sql server ...
    m'enfin je n'y vais pas souvent




    code transact-sql pour sql >= 2005
    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
     
    declare @result bit
    begin try
      begin transaction nom_au_choix
     
          insert ...
     
          update ...
     
          delete ...
     
          (...)
     
        commit tran
        set @result = 1
        select @result 
    end try
    begin catch
        if @@trancount > 0      rollback tran
        set @result = 0
        select @result
    end catch


    explications de chaque morceau :
    begin try traitement end try begin catch traitement end catch
    c'est comme le try catch de vb, en cas d'erreur de sévérité supérieure à 10 ca passe dans le catch sans continuer (en dessous de 10 ca continue, ce n'est qu'un avertissement, pas une erreur)
    arrivé à la fin du begin sans erreur, ca ne passe pas dans le catch

    begin transaction démarre une transaction, un genre de point de restauration
    commit tran permet de dire que la transaction précédement commencée est validée
    rollback tran permet d'annuler tout ce qui a été fait depuis le begin tran
    une transaction est valable pour une connexion
    une transaction vérrouille tout ce qu'elle écrit (donc à utiliser avec parcimonie)

    et au passage j'ai rajouté un booléen (bit dans sql server) pour dire si ca c'est bien passé, exécuté dans un executereader ca te permet de savoir si ca c'est bien passer
    rethrower l'erreur dans le catch serait aussi une solution, ca permet de pouvoir enregistrer/afficher le message d'erreur (voir raiserror et error_message() via F1 dans sql server management studio)

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 222
    Points : 28 210
    Points
    28 210
    Par défaut
    Utilise les transactions.

    Tu commence une transaction avant l'enregistrement. Toutes les modifications de ta base seront dans la transaction.
    Une fois l'enregistrement terminé, tu valide la transaction par un commit, c'est cette commande qui va faire l'enregistrement réel dans la base.
    Si un problème survient, tu annule la transaction avec un rollback, rien n'est enregistré dans la base.

  4. #4
    Membre actif 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
    Points : 295
    Points
    295
    Par défaut
    Merci bien à vous deux.

    Effectivement, mais là apparement faut que je code côté SQL Server ? et il faut utiliser des procedures stocké ?
    moi j'encode mes requetes dans le code VB, ya pas moyen de faire pareil dans le code VB?

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 222
    Points : 28 210
    Points
    28 210
    Par défaut
    TU peux bien évidemment le faire du coté VB.

    J'ai pas le code sous la main, mais regarde sur ton objet connection, tu as tout ce qu'il faut pour les transactions

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 176
    Points : 25 118
    Points
    25 118
    Par défaut
    le code que je t'ai mis, c'est une requete !

    dans commandtext, tu peux mettre des centaines de ligne, tant que c'est du sql
    tu peux mettre des tas d'insert, des begin try, des begin tran etc... le tout dans le meme string

    il suffit juste de concaténer tes requetes entre le begin tran et le commit tran, le reste est standard

    d'ailleurs tout ce qui peut fait dans une procédure stockée peut etre envoyé dans un seul commandtext aussi, ca fera le meme effet (hormis les gains de perf éventuels apportés par la reprise de compilation de la procédure stockée)

  7. #7
    Membre actif 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
    Points : 295
    Points
    295
    Par défaut
    Merci bien

    Je teste ça et te(vous) dire quoi.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/12/2006, 20h31
  2. [ADO.NET][SQL SERVER] Comment supprimer des enregistrements?
    Par julien37510 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 01/12/2006, 12h00
  3. Réponses: 1
    Dernier message: 21/06/2006, 12h49
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. Hébergement ASP.NET + SQL Server
    Par papouAlain dans le forum ASP
    Réponses: 3
    Dernier message: 07/10/2004, 12h32

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