[exemple] transaction

Soyez le premier à donner votre avis sur cette source.

Vue 16 534 fois - Téléchargée 684 fois

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 / Exemple :


'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/

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

iatidal
Messages postés
1
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
16 mars 2008
-
merci pour les codes que vos offres sa m'aide dans mes étude
cs_jimmy69
Messages postés
787
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008
-
Bonsoir Denis,

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

A plus Denis...

Ciao
Christophe
Un bouillonnais
cs_arcollet
Messages postés
31
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
13 avril 2008
-
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
cs_jimmy69
Messages postés
787
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008
-
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
cs_arcollet
Messages postés
31
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
13 avril 2008
-
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.