Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[EXEMPLE] TRANSACTION


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Niveau : Débutant Date de création : 02/08/2004 Vu / téléchargé: 10 759 / 483

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Votre premiere transaction (Juillet 2004)
----------------------------------------------------

P'tit script  qui
ne fait que d'insérer des valeurs dans une table sql serveur et qui recupere
l'identifiant (clef) dernierement insére..grace a une procedure stockee qui renvoit donc un
parametre.

Ce n'est qu'un exemple que j'ai realise  pour vous montrer comment fonctionne
une transaction.

Pour ceux qui ne savent pas ce qu'est une procedure stockee, je les renvois vers ce lien ou vous
pourrez telecharger un p'tit tuto au format word.

http://www.delphifr.com/code.aspx?ID=22175

Pour cet exemple, je me suis basé sur le script de Fabrice qui se trouve à cette adresse
http://www.aspfr.com/code.aspx?ID=9038 => thanks


Ce script vous montrera comment réalise une transactions :

comment la demarrer                                  => begintransaction
la valider                                                     => commit()
restaurer la transaction en cas d'erreurs   => rollback()


Dans le .zip, vous trouverez un p'tit tuto d'une page au format word vous renseignant un peu
plus sur les transactions, qu'est ce qu'une transaction, exemple de transaction,
et sur la classe sqltransaction, ainsi qu'un lien vous
renvoyant vers le site de msdn ou tout est ecrit ....:-) y'a qu'a suivre !


Por faire tourner ce script :
------------------------------------

Il vous suffit d'ouvrir le fichier en .sql et de le coller
dans l'analyseur de requetes et de l'executer...
Cela créera la structure de la table ainsi que la procedure stockee

ensuite ouvrez le fichier global.asax
et changez les propriete de la connection, mettez le nom de
votre base de donnees

ICI =>
myConnection.Connectionstring = "server=(local);Initial Catalog=NomDeVotreBase;trusted_connection=yes"


Voila enregistrez le tout...

ca roule

 

Source

  • 'ENREGISTREMENT DES DONNEES DS LA BASE
  • Sub BtnValide_Click(sender As Object, e As EventArgs)
  • '---- SI LE TEXTBOXNOM EST VIDE ON AFFICHE UN P TIT MESSAGE ERREUR ---
  • IF (txtboxnom.text = "") then
  • labelerreur.text = "Veuillez completer le formulaire svp...!"
  • ' ----SINON ON ENvOIT TOUTES LES DONNEES A LA PROCEDURE STOCKEE ---
  • Else
  • ' --- RECUPERATION CONNECTION DS LE FICHIER GLOBAL.ASAX ---
  • myConnection = Ctype(Session("myConnection"),sqlConnection)
  • '--- DECLARATION -------
  • Dim myTrans As SqlTransaction
  • Dim redirectionUrl as string
  • Dim Parametre As SqlParameter
  • Dim Mycommand as new sqlcommand
  • '-------------------------------
  • ' GESTION DES ERREURS
  • '-------------------------------
  • '--- DEBUT DE LA TRANSACTOIN -------
  • myTrans = myConnection.BeginTransaction
  • Try
  • '--- PROCEDURE STOKCEE AJOUTUTILISATEUR -----
  • MyCommand = New SqlCommand("ajoututilisateur",MyConnection)
  • MyCommand.CommandType = commandType.StoredProcedure
  • '----------------------------------------------------------------
  • ' PARAMETRE PASSE A LA PROCEDURE STOCKEE => AJOUTUTILISATEUR
  • ' ON PLACE DONC LES VALEURS CONTENUES DS LES TEXTBOX
  • ' DS LES VARIABLES POUR LA PROCEDURE STOCKEE
  • '----------------------------------------------------------------
  • Mycommand.parameters.add("@insertnom", SqlDbType.nvarchar).value = Txtboxnom.text
  • Mycommand.parameters.add("@insertprenom", SqlDbType.nvarchar).value = TxtBoxprenom.text
  • Mycommand.parameters.add("@insertadresse", SqlDbType.nvarchar).value = TxtBoxad.text
  • Mycommand.parameters.add("@insertville", SqlDbType.nvarchar).value = TxtBoxvi.text
  • Mycommand.parameters.add("@inserttelephone", SqlDbType.nvarchar).value =TxtBoxtel.text
  • Mycommand.parameters.add("@inserdate", sqlDbType.datetime).value=calendar.selecteddate
  • '---- RECUPERATION DE LA CLEF INSERER ------
  • Parametre = MyCommand.Parameters.Add("@clefutilisateur", SqlDbType.Int)
  • Parametre.Direction = ParameterDirection.Output
  • ' --- EXECUTION DE LA COMMANDE AVEC RECUPERATION DU DERNIER INSERER
  • Mycommand.transaction = Mytrans
  • Mycommand.ExecuteReader()
  • '--- ON RECUPERE LA PK RECEMENT INSERER ET ON REDIRIGE LE TOUT -----
  • Dim dernier_insere = CInt(MyCommand.Parameters("@clefutilisateur").Value.ToString())
  • '---- REDIREXCTION -----
  • RedirectionURL = "details_insertion.aspx?id="+dernier_insere.ToString()
  • '--- COMMIT = Valide la transaction de base de données -----
  • myTrans.Commit()
  • '---- REDIRECTION -------
  • Response.Redirect(RedirectionURL)
  • Catch
  • ' ---ici on place le code à exécuter si l’erreur se produit
  • ' --- Rollback = Restaure une transaction à partir d'un état d'attente
  • myTrans.Rollback()
  • labelerreur.text = "Une erreur s'est produite.."
  • Finally
  • ' ----- FERMETURE CONNECTION ------
  • Myconnection.close()
  • End Try
  • 'FIN
  • end if
  • End Sub
 'ENREGISTREMENT DES DONNEES DS LA BASE
         Sub BtnValide_Click(sender As Object, e As EventArgs)
    
    
          '----  SI LE TEXTBOXNOM EST VIDE ON AFFICHE UN P TIT MESSAGE ERREUR ---
    
           IF (txtboxnom.text = "") then
    
              labelerreur.text = "Veuillez completer le formulaire svp...!"
    
           ' ----SINON ON ENvOIT TOUTES LES DONNEES A LA PROCEDURE STOCKEE ---
    
           Else
    
           ' --- RECUPERATION CONNECTION  DS LE FICHIER GLOBAL.ASAX ---
             myConnection = Ctype(Session("myConnection"),sqlConnection)
    
                 
            '--- DECLARATION -------
             Dim myTrans As SqlTransaction
             Dim redirectionUrl as string
             Dim Parametre As SqlParameter
             Dim  Mycommand as new sqlcommand
    
    
             '-------------------------------
             '       GESTION DES ERREURS
             '-------------------------------
    
             '--- DEBUT DE LA TRANSACTOIN -------
    
             myTrans = myConnection.BeginTransaction
             Try
    
              '--- PROCEDURE STOKCEE AJOUTUTILISATEUR -----
    
             MyCommand = New SqlCommand("ajoututilisateur",MyConnection)
             MyCommand.CommandType = commandType.StoredProcedure
    
             '----------------------------------------------------------------
             '      PARAMETRE PASSE A LA PROCEDURE STOCKEE => AJOUTUTILISATEUR
             '      ON PLACE DONC LES VALEURS CONTENUES DS LES TEXTBOX
             '      DS LES VARIABLES POUR LA PROCEDURE STOCKEE
             '----------------------------------------------------------------
    
             Mycommand.parameters.add("@insertnom", SqlDbType.nvarchar).value = Txtboxnom.text
             Mycommand.parameters.add("@insertprenom", SqlDbType.nvarchar).value = TxtBoxprenom.text
             Mycommand.parameters.add("@insertadresse", SqlDbType.nvarchar).value = TxtBoxad.text
             Mycommand.parameters.add("@insertville", SqlDbType.nvarchar).value = TxtBoxvi.text
             Mycommand.parameters.add("@inserttelephone", SqlDbType.nvarchar).value =TxtBoxtel.text
             Mycommand.parameters.add("@inserdate", sqlDbType.datetime).value=calendar.selecteddate
    
    
               '---- RECUPERATION DE LA CLEF INSERER ------
    
               Parametre = MyCommand.Parameters.Add("@clefutilisateur", SqlDbType.Int)
               Parametre.Direction = ParameterDirection.Output
    
               ' --- EXECUTION DE LA COMMANDE AVEC RECUPERATION DU DERNIER INSERER
    
               Mycommand.transaction = Mytrans
               Mycommand.ExecuteReader()
    
    
               '--- ON RECUPERE LA PK RECEMENT INSERER ET ON REDIRIGE LE TOUT -----
    
               Dim dernier_insere = CInt(MyCommand.Parameters("@clefutilisateur").Value.ToString())
    
               '---- REDIREXCTION -----
                RedirectionURL = "details_insertion.aspx?id="+dernier_insere.ToString()
    
               '--- COMMIT = Valide la transaction de base de données -----
    
              
                myTrans.Commit()
    
               '---- REDIRECTION -------
               Response.Redirect(RedirectionURL)
    
             Catch
             ' ---ici on place le code à exécuter si l’erreur se produit
    
                ' --- Rollback = Restaure une transaction à partir d'un état d'attente
    
                 myTrans.Rollback()
    
                labelerreur.text = "Une erreur s'est produite.."
    
               Finally
              ' ----- FERMETURE CONNECTION ------
               Myconnection.close()
             End Try
    
          'FIN
          end if
    
    End Sub

Conclusion


Enjoy

Christophe

http://membres.lycos.fr/annmysql/  
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de jesusonline le 02/08/2004 13:08:18 administrateur CS

comme d'hab du joli boulot :)

signaler à un administrateur
Commentaire de jimmy69 le 02/08/2004 13:36:57


Merci Cyril, je te renvoi la balle ....car tu es toujours presents qd j'ai un stress :-) ...et je t'en remercie vraiment ....!

Je prepare un code sur les triggers ...mais bon j'ai un peu de mal n'etait pas programmeur...mais bon j'avance...

Tout ce que j'espere c'est que mes codes (exemples)puissent servir a d'autres...

A bientot

Christophe
Life is a choice :-)

signaler à un administrateur
Commentaire de arcollet le 02/08/2004 15:38:46

Bonjour,

Y a t il un avantage à gérer la transaction côté code plutôt que côté Transact-SQL ?

Merci de votre réponse et de votre exemple

Denis

signaler à un administrateur
Commentaire de jimmy69 le 02/08/2004 16:00:40

salut salut Denis,

Voila une ...oui une tres tres bonne question?!
Pour moi je dirai et je suis pour... gerer les transactions  sous transac-sql de cette façon on n'encombre un peu moins le reseaux...comme pour les procedures stockees !
Mais est ce qu'il y'a un avantage a gerer les transactions cote code... j'en ai aucune idée....sorry !

j"avais trouve un exemple sur les transactions (code)et je me suis dit que je pourrais faire un p'tit exemple pour les visiteurs de code sources :-)

Mais bon ta question est interessante et si tu as le temps je te conseille de la poser ds le forum voir un peu ce que les gens en pensent...non!

Allez moi je vais profiter un peu du soleil

Ciao Denis

signaler à un administrateur
Commentaire de arcollet le 02/08/2004 16:28:29

Je vois 3 raisons :
- la gestion/récupération d'erreurs fines qui est beucoup plus souple (puissante ?) coté code que côté transac- slq
- la possibilité de gérer 2 transactions différentes sur 2 serveurs de données différents.
- l'indépendance vis à vis de la base de données niveau code.

Ton exemple m'a en fait donné une idée (qui n'est pas neuve). Celle de créer une class 'transact' qui marcherait à la fois sur SQL Server et Oracle.

Lors de l'appel de 2 procédures stockés par exemple (Oracle + SQL Server), je choisi si on la fait Transact ou non ! Et ou çà a merdé si çà merde !

Ce qui résoudrait mon cas tordu d'une appli mi SQL Server mi Oracle.

Merci jimmy69

Denis

signaler à un administrateur
Commentaire de jimmy69 le 02/08/2004 22:37:58

Bonsoir Denis,

Je te remercie pour tes comments qui nous en apprennent encore plus !

A plus Denis...

Ciao
Christophe
Un bouillonnais

signaler à un administrateur
Commentaire de iatidal le 16/03/2008 19:14:34

merci pour les codes que vos offres sa m'aide dans mes étude

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.