SqlTransaction VB [Résolu]

Signaler
Messages postés
133
Date d'inscription
mercredi 27 juin 2012
Statut
Membre
Dernière intervention
10 janvier 2012
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
Bonjour,
J'ai lu le guide complet vb. A souligner, un excellent bouquin.
Bref, il ne me semble pas avoir vu de sqltransaction dans le bouquin.
Donc, je voulais savoir si la sqlTransaction est necessaire ou si on peut
négliger ce petit détail.

D'avance, je remercie les gens qui pourront me répondre.

A bientot.

5 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
<li>
Vous êtes ici : Thèmes / [forum-VISUAL-BASIC_1.aspx Visual Basic 6] / [theme-BASE-DONNEES_234.aspx Base de données] / [theme-ADO-DAO_236.aspx ADO & DAO] / SqlTransaction VB</li>


tu as posté en VB6....
je pensais que tu parlais du "langage TRANSAC" pour et selon la database, et non l'objet "sqltransaction" qui n'existe pas en VB6...

un DotNetien saura sans doute t'orienter
topic déplacé vers VB.NET, merci d'être vigilant pour tes prochains topics :)
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
salut, tout dépend de ta base...
le TRANSAC n'est pas géré par l'ADO mais directement par la base.
access ne le supporte pas
mysql, en option et selon la version (avec 'autocommit' de mémoire)
sqlsever, oui
autre, à voir au cas par cas.

c'est donc un détail utile mais très loin d'être vital pour commencer

++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
133
Date d'inscription
mercredi 27 juin 2012
Statut
Membre
Dernière intervention
10 janvier 2012
1
Re: Merci pour la réponse

mais :-) et oui, y a un mais ! !  hihih
dans un livre que j'ai aussi fait, il y a longtemps, les savons du soleil, il faisait des SqlTransaction : tu peux avoir le code source la :
http://www.editions-organisation.com/Livre/9782212112108/asp-net

je te donne quand meme le code pour plus d'info :




Dim

RedirectionURL


As





String










Dim

SQL


As





String











Dim

CommandAdapter,LinesAdapter


As

SqlDataAdapter

myDataSet =



new

DataSet()



' Ouverture connexion





myConnection.Open()











' Cr‚ation nouvelle transaction











Dim

myTransaction


As

SqlTransactionmyTransaction = myConnection.BeginTransaction()



' Pr‚paration de DataSet & SqlDataAdapter pour la table "Commande"











Try





SQL "SELECT * FROM Commande WHERE ID_Commande 0"





CommandAdapter =





new

SqlDataAdapter(SQL,myConnection)

CommandAdapter.SelectCommand.Transaction = myTransaction

CommandAdapter.Fill(myDataSet,



"Commande"

)

CommandAdapter.InsertCommand =



new

SqlCommand(


"CreerCommande"

,myConnection)CommandAdapter.InsertCommand.CommandType = CommandType.StoredProcedure

CommandAdapter.InsertCommand.Parameters.Add(



"@FournisseurID"

,SqlDbType.Int,4,


"ID_Fournisseur"

)CommandAdapter.InsertCommand.Parameters.Add(



"@DateLivraison"

,SqlDbType.DateTime,8,


"DateLivraison"

)

CommandAdapter.InsertCommand.Transaction = myTransaction



Dim

OutputParam


As

SqlParameterOutputParam =



new

SqlParameter(


"@CommandeID"

,SqlDbType.Int,4)OutputParam.Direction = ParameterDirection.Output

CommandAdapter.InsertCommand.Parameters.Add(OutputParam)



' Pr‚paration de DataSet & SqlDataAdapter pour la table "LigneCommande"





SQL "SELECT * FROM LigneCommande WHERE ID_LigneCommande 0"





LinesAdapter =





new

SqlDataAdapter(SQL,myConnection)LinesAdapter.SelectCommand.Transaction = myTransaction

LinesAdapter.Fill(myDataSet,



"LigneCommande"

)



Dim

myBuilder


As

SqlCommandBuildermyBuilder =



new

SqlCommandBuilder(LinesAdapter)

myBuilder.GetInsertCommand().Transaction = myTransaction



' Cr‚ation de la commande dans le DataSet











Dim

myDataRow


As

DataRowmyDataRow = myDataSet.Tables(



"Commande"

).NewRow()

myDataRow(



"ID_Fournisseur"

) = ListeFournisseurs.SelectedItem.ValuemyDataRow(



"DateLivraison"

) = Calendrier.SelectedDatemyDataSet.Tables(



"Commande"

).Rows.Add(myDataRow)



' Cr‚ation effective de la commande (indispensable pour r‚cup‚rer l'ID !)





CommandAdapter.Update(myDataSet,





"Commande"

)



Dim

NewCommandID


As

Int32NewCommandID = OutputParam.Value



' Cr‚ation des lignes de commande dans le DataSet











Dim

i


As

Int32



Dim

Qte


As





String











For

i = 0


To

(DetailCommande.Items.Count-1)

Qte =



CType

(DetailCommande.Items(i).Cells(2).FindControl(


"Qte"

),TextBox).Text



If

(Qte<>


""

)


Then


myDataRow = myDataSet.Tables(





"LigneCommande"

).NewRow()myDataRow(



"ID_Commande"

) = NewCommandIDmyDataRow(



"ID_ReferenceFournisseur"

) = DetailCommande.DataKeys(i)myDataRow(



"Quantite"

) = System.Convert.ToInt32(Qte)myDataSet.Tables(



"LigneCommande"

).Rows.Add(myDataRow)



End





If











Next











' Cr‚ation effective des lignes de commande dans la base





LinesAdapter.Update(myDataSet,





"LigneCommande"

)RedirectionURL =



"FinCommande.aspx?id="

+NewCommandID.ToString()



Catch

myException


As

Exception

myTransaction.Rollback()

myConnection.Close()

Response.Redirect(



"ErreurCde.aspx?erreurmsg="

+myException.Message)
Messages postés
133
Date d'inscription
mercredi 27 juin 2012
Statut
Membre
Dernière intervention
10 janvier 2012
1
Oki, merci beaucoup !! desolé, donc plus besoin de sqltransaction.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Il faut bien comprendre ce que est une transaction.

C'est un ensemble de commande qui ne peuvent etre dissocier.

Si, dans ton code, tu ne précise pas de transaction, en .net, je pense que chaque requette modifiant la base génére automatiquement sa propre transaction.

Cependant, si tu dois utiliser un certain nombres de requettes de mise à jour, et si par exemple une de ces requettes foire, il faut annuler les requettes précédentes, alors là, tu va etre obliger manuellement de définir une transaction.

Ex du passage d'une commande :
- Génération de la commande
- Retrait du stock des produits achetés
- Génération du BL
- Génération de la facture
- Retrait de la somme du compte du client
- ......

Tout cela se fait avec un certains nombre de requettes. Si une foire, il faut toutes les annuler. C'est là que le transaction est utile, entre-autre

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php