OVH Cloud OVH Cloud

BeginTransaction suite...

1 réponse
Avatar
Annie
J'ai fait un test et cela me g=E9n=E8re une erreur :
Execute requiert que la commande ait un objet transaction=20
lorsque la connexion assign=E9e =E0 la commande se trouve dans=20
une transaction locale en attente. La propri=E9t=E9=20
Transaction de la commande n'a pas =E9t=E9 initialis=E9e.

Le no. de ligne de l'erreur de situe lorsque que je=20
remplit mon dataset avec mon OleDbAdapter.

J'ai besoin d'explication concernant cette erreur.
J'ai modifi=E9 mon code ci-dessous pour que vous puissiez=20
m'aider. Merci!

>-----Message d'origine-----
>Bonjour Annie,
>
>Il te faut utiliser l'objet OledbTransaction comme ceci.
>.......
>.......
>cnnOLEDB.Open()
>dim txnOLEDB as OleDbTransaction=3DcnnOLEDB.BeginTransaction
()
>ensuite tu utilises les m=E9thodes Commit() et RollBack de=20
l'objet txnOLEDB.
>
>txnOLEDB.Commit()
>.....
>
>txnOLEDB.RollBack()
>
>A+
>Eric Verni=E9
>Microsoft France
>
>"Annie" <anonymous@discussions.microsoft.com> a =E9crit=20
dans le message de=20
>news: 406301c4aa1a$d5fa9fa0$a601280a@phx.gbl...
>J'aimerais me servir de 'BeginTransaction', 'Commit'
>et 'Rollback' dans la gestion de mes bases de donn=E9es.
>Voici une partie de mon code pour avoir une mani=E8re de
>proc=E9der.
>



>cnnOLEDB.ConnectionString =3D gFournisseurDonneesCie
>cnnOLEDB.Open()

dim txnOLEDB as OleDbTransaction=3DcnnOLEDB.BeginTransaction

Try
>adaOLEDB.SelectCommand =3D New OleDbCommand("SELECT * FROM
>UtilisateurDivers WHERE CodeIDUtilisateur =3D ?", cnnOLEDB)
>adaOLEDB.SelectCommand.Parameters.Add("@strCodeIDDivers",
>OleDbType.VarChar, 25)
>adaOLEDB.SelectCommand.Parameters
>("@strCodeIDDivers").Value =3D gstrCodeUtilisateur
>
>cmbOLEDB =3D New OleDbCommandBuilder(adaOLEDB)
>dstDivers.Clear()
>adaOLEDB.Fill(dstDivers, "UtilisateurDivers")
>If dstDivers.Tables("UtilisateurDivers").Rows.Count > 0
>Then
> drwRangee =3D dstDivers.Tables("UtilisateurDivers").Rows(0)
> drwRangee.BeginEdit()
> drwRangee.Item("DbGridCategClient") =3D strEcritureCols
> drwRangee.EndEdit()
> adaOLEDB.Update(dstDivers, "UtilisateurDivers")
>End If

txnOLEDB.Commit()

Catch ......
txnOLEDB.Rollback()
Finally
> cnnOLEDB.Close()
> dstDivers =3D Nothing
End Try
>
>J'aimerais avoir une meilleure m=E9thode que celle que j,ai
>trouv=E9e, car elle ne fonctionne pas du tout.
>Merci de vos r=E9ponse!=20
>

1 réponse

Avatar
Annie
Je pense que j'ai trouvé la solution!!!!
Il faut rajouter la ligne suivante:

adaOLEDB.SelectCommand.Transaction = txnOLEDB
(Voir dans le code à la fin)

J'ai fait des tests et cela fonctionne très bien!
J'enregistre dans plus de 15 tables et s'il y a une erreur
dans une des tables, aucun enreg. n'est effectué dans
aucune des tables!

J'aimerais avoir un commentaire de Microsoft sur cette
façon de faire! Merci!

-----Message d'origine-----
J'ai fait un test et cela me génère une erreur :
Execute requiert que la commande ait un objet transaction
lorsque la connexion assignée à la commande se trouve


dans
une transaction locale en attente. La propriété
Transaction de la commande n'a pas été initialisée.

Le no. de ligne de l'erreur de situe lorsque que je
remplit mon dataset avec mon OleDbAdapter.

J'ai besoin d'explication concernant cette erreur.
J'ai modifié mon code ci-dessous pour que vous puissiez
m'aider. Merci!

-----Message d'origine-----
Bonjour Annie,

Il te faut utiliser l'objet OledbTransaction comme ceci.
.......
.......
cnnOLEDB.Open()
dim txnOLEDB as




OleDbTransaction=cnnOLEDB.BeginTransaction
()
ensuite tu utilises les méthodes Commit() et RollBack de


l'objet txnOLEDB.

txnOLEDB.Commit()
.....

txnOLEDB.RollBack()

A+
Eric Vernié
Microsoft France

"Annie" a écrit


dans le message de
news: 406301c4aa1a$d5fa9fa0$
J'aimerais me servir de 'BeginTransaction', 'Commit'
et 'Rollback' dans la gestion de mes bases de données.
Voici une partie de mon code pour avoir une manière de
procéder.






cnnOLEDB.ConnectionString = gFournisseurDonneesCie
cnnOLEDB.Open()



dim txnOLEDB as OleDbTransaction=cnnOLEDB.BeginTransaction

Try
adaOLEDB.SelectCommand = New OleDbCommand("SELECT * FROM
UtilisateurDivers WHERE CodeIDUtilisateur = ?", cnnOLEDB)
adaOLEDB.SelectCommand.Parameters.Add("@strCodeIDDivers",
OleDbType.VarChar, 25)
adaOLEDB.SelectCommand.Parameters
("@strCodeIDDivers").Value = gstrCodeUtilisateur






adaOLEDB.SelectCommand.Transaction = txnOLEDB



cmbOLEDB = New OleDbCommandBuilder(adaOLEDB)
dstDivers.Clear()
adaOLEDB.Fill(dstDivers, "UtilisateurDivers")
If dstDivers.Tables("UtilisateurDivers").Rows.Count > 0
Then
drwRangee = dstDivers.Tables("UtilisateurDivers").Rows




(0)
drwRangee.BeginEdit()
drwRangee.Item("DbGridCategClient") = strEcritureCols
drwRangee.EndEdit()
adaOLEDB.Update(dstDivers, "UtilisateurDivers")
End If



txnOLEDB.Commit()

Catch ......
txnOLEDB.Rollback()
Finally
cnnOLEDB.Close()
dstDivers = Nothing


End Try

J'aimerais avoir une meilleure méthode que celle que j,ai
trouvée, car elle ne fonctionne pas du tout.
Merci de vos réponse!




.