OVH Cloud OVH Cloud

BeginTransaction

5 réponses
Avatar
Annie
J'aimerais me servir de 'BeginTransaction', 'Commit'=20
et 'Rollback' dans la gestion de mes bases de donn=E9es.
Voici une partie de mon code pour avoir une mani=E8re de=20
proc=E9der.

cnnOLEDB.ConnectionString =3D gFournisseurDonneesCie
cnnOLEDB.Open()
adaOLEDB.SelectCommand =3D New OleDbCommand("SELECT * FROM =20
UtilisateurDivers WHERE CodeIDUtilisateur =3D ?", cnnOLEDB)
adaOLEDB.SelectCommand.Parameters.Add("@strCodeIDDivers",=20
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=20
Then
drwRangee =3D dstDivers.Tables("UtilisateurDivers").Rows(0)
drwRangee.BeginEdit()
drwRangee.Item("DbGridCategClient") =3D strEcritureCols
drwRangee.EndEdit()
adaOLEDB.Update(dstDivers, "UtilisateurDivers")
End If
cnnOLEDB.Close()
dstDivers =3D Nothing

J'aimerais avoir une meilleure m=E9thode que celle que j,ai=20
trouv=E9e, car elle ne fonctionne pas du tout.
Merci de vos r=E9ponse!

5 réponses

Avatar
Eric Vernié [MS]
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()
adaOLEDB.SelectCommand = New OleDbCommand("SELECT * FROM
UtilisateurDivers WHERE CodeIDUtilisateur = ?", cnnOLEDB)
adaOLEDB.SelectCommand.Parameters.Add("@strCodeIDDivers",
OleDbType.VarChar, 25)
adaOLEDB.SelectCommand.Parameters
("@strCodeIDDivers").Value = gstrCodeUtilisateur

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
cnnOLEDB.Close()
dstDivers = Nothing

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!
Avatar
Annie
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

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!


.



Avatar
RABILLOUD JMARC [MVP]
Si tu utilises un objet command, tu dois lui assigner la connection en
faisant
MaCommand.Transaction=txnOLEDB

Amicalement

"Annie" a écrit dans le message de
news: 278d01c4aae4$0914ccc0$
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

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!


.



Avatar
Annie
Je connais cette méthode, c'est la seule exemple qu'on a!
Regardez plus bas, je n'utilise pas d'objet 'Command'
comme vous le mentionnez! Mais plutôt un
objet 'SelectCommand'. Alors comment puis-je adapter une
transaction dans ce cas-ci!
C'est ça que je voudrais savoir! J'ai rajouté du code
(voir plus bas) pour utiliser une 'Transaction' et je
voudrais savoir si c'est correct, car ça plante!!!
Merci de votre aide!

-----Message d'origine-----
Si tu utilises un objet command, tu dois lui assigner la


connection en
faisant
MaCommand.Transaction=txnOLEDB

Amicalement

"Annie" a écrit


dans le message de
news: 278d01c4aae4$0914ccc0$
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

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!


.





.



Avatar
Annie
Je pense que j'ai trouvé la solution!!!

Il faut rajouter la ligne suivante:

adaOLEDB.SelectCommand.Transaction = txnOLEDB
(Voir plus bas dans le code)

-----Message d'origine-----
Je connais cette méthode, c'est la seule exemple qu'on a!
Regardez plus bas, je n'utilise pas d'objet 'Command'
comme vous le mentionnez! Mais plutôt un
objet 'SelectCommand'. Alors comment puis-je adapter une
transaction dans ce cas-ci!
C'est ça que je voudrais savoir! J'ai rajouté du code
(voir plus bas) pour utiliser une 'Transaction' et je
voudrais savoir si c'est correct, car ça plante!!!
Merci de votre aide!

-----Message d'origine-----
Si tu utilises un objet command, tu dois lui assigner la


connection en
faisant
MaCommand.Transaction=txnOLEDB

Amicalement

"Annie" a écrit


dans le message de
news: 278d01c4aae4$0914ccc0$
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!


.





.



.