|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre émérite
![]() Tony Développeur .NET Inscription : novembre 2010 Messages : 570 ![]() |
Bonjour,
je développe un soft en VB.NET qui communique avec une base DB2 sur un AS400. J'ai besoin de faire les mises à jour de 2 tables en même temps, donc je décide d'utiliser une transaction. J'ai donc trouvé le code suivant dans la FAQ : Code :
Code :
sqlCmd.CommandText += "INSERT INTO db2admin.Test2 (nom, prenom) VALUES ('A','A');" puisque je dois faire 2 instructions dans ma transaction. Ce que je n'arrive pas à trouver comment séparer les 2 instructions Update, j'ai essayé un peu tout, virgule, point-virgule, slash, etc. mais rien n'y fais je me trouve avec une jolie erreur qui me dit que le UPDATE suivant est inattendu, et que l'on attend un <FIN-D'INSTRUCTION> Sauriez-vous m'éclaierer sur le sujet ? Merci |
||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Tu ne peux traiter ou exécuter les instructions SQL qu'une par une, comme je le montre ci-dessous :
Code :
Code :
|
||||
|
|
10
|
|
|
#3 |
|
Membre émérite
![]() Tony Développeur .NET Inscription : novembre 2010 Messages : 570 ![]() |
Merci pour ta réponse, je vais faire des tests pour voir si en faisant un rollback après 2 commandes comme ça les 2 sont annulées ou non.
Je le trouve quand même assez primitif ce DB2 =/ Bon ba génial la table ne semble pas accepter les transactions car elle n'est pas journalisée ou je ne sais quoi ... Pour le moment j'ai mis un super retry dans mon code si la seconde instruction ne se déroule pas correctement, mais si quelqu'un a une solution ça m'arrange. |
|
|
00
|
|
|
#4 | |||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Citation:
Citation:
![]() C'est plutôt que tu ne connais pas les limites / possibilité de tes drivers. Recherche du côté du batch jdbc pour exécuter plusieurs statement d'un coup (insert en particulier). En java avec le driver JT400 ca fonctionne. Citation:
Ca permet de pouvoir annuler tes ordres sql (rollback) |
|||
|
|
10
|
|
|
#5 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Tu peux journaliser tes tables en lançant la commande OS/400 :
Code :
STRJRNPF FILE(MaBib/MaTable1 MaBib/MaTable2 MaBib/MaTable3 ...) JRN(MaBib/MonJrn) IMAGES(*BOTH)
Code :
CRTJRN JRN(MaBib/MonJrn) JRNRCV(MaBib/MonRcv) ... A l'attention du webmestre : Je trouve que la séquence ajoutée sur chaque ligne de code pollue le code et induit le lecteur en erreur. C'était plus clair et plus propre auparavant sans cette séquence qui me paraît bien inutile. |
|
|
10
|
|
|
#6 |
|
Membre émérite
![]() Tony Développeur .NET Inscription : novembre 2010 Messages : 570 ![]() |
Je vous remercie de vos 2 réponses.
Quand je dis que DB2 semble primitif c'est que j'ai aussi quelques fonction SQL stqndard qui n'existent pas en DB2, ou dans la version que j'utilise plutôt. Je pense qu'ils sont loin d'être à jour dans leur version. Je ne vais probablement pas pouvoir journaliser mes tables sachant que l dans l'une j'ai un enregistrement entrant toutes les 10 secondes, et de ce que l'on me dit la journalisation prend de la place et du temps. Je vais les laisser devant le choix entre l'intégrité des données ou le temps/l'espace utilisé Je marque come résolu et je viendrai reposter si finalement je journalise. Mercie encore |
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Citation:
Peut-être pourrai-tu poser tes fonctions qui posent problèmes afin que des personnes plus expérimentée avec db2 puissent te donner une solution / ré-écriture ? Citation:
Concernant le temps perdu : sérieux une insertion toute les 10sec c'est rien du tout. Tu n'as pas une bonne approche du problème selon moi. Il faut plutôt voir avec ces axes là : - criticité des données - intégrité de la base quand ton sql / code plante (lock, bug, etc) - type de traitement (batch / intéractif / ..) - volume (attention en Mo / Go) traité. Avant que la journalisation te pénalise (temps de réponse) sur des traitements tu as le temps vu ce que tu nous présente. Si ta base est destinée à être utilisée par une application tierce je penses qu'il ne faut même pas se poser la question => journalisation + gestion des transaction par cette même application. Ca te donnera beaucoup plus de souplesse & possibilité pendant les devs et tu n'auras pas besoin de faire des reprises de données des qu'un bug apparait |
||
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Patrick Inscription : mai 2008 Messages : 821 ![]() |
On peux faire plusieurs insert de valeurs en simultané :
Code :
|
||
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
On en apprend tous les jours... |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Patrick Inscription : mai 2008 Messages : 821 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com