Problème avec BeginTrans et Commit pour éxécuter plusieurs requètes SQL

Signaler
Messages postés
2
Date d'inscription
vendredi 5 juin 2009
Statut
Membre
Dernière intervention
22 juin 2009
-
Messages postés
2
Date d'inscription
vendredi 5 juin 2009
Statut
Membre
Dernière intervention
22 juin 2009
-
Salut à tous,


je souhaite modifier ou créer un article dans ma DB (SQL2005) en utilisant begintrans et commit mais je reçois un message d'erreur qui me dit qu'aucune transaction n'est active.


-->
strSql = ""
lngCnt1 = 0
For lngCnt = 0 To lngarrCounter
  strSql = strSql & strarrQuery(lngCnt) 'table contenant les instructions SQL
Next lngCnt
mconLocal.BeginTrans()
mconLocal.Execute(strSql)
mconLocal.CommitTrans()
strSql = ""
-->




Après quelques recherches, j'ai remarque que cette erreur ne survient que lorsque j'envoie un gros paquet d'instructions au serveur SQL (plus d'une centaine), mais si j'envoi un paquet d'une vingtaine d'instructions là pas de problèmes.
J'ai donc tenté de découper mon gros paquets d'instructions en mettant en place une boucle FOR (avec dedans  BeginTrans, Execute et commit) qui l'envoie par petit paquets au serveur SQL et là tout fonctionne parfaitement.


-->
strSql = ""
lngCnt1 = 0
For lngCnt = 0 To lngarrCounter
  strSql = strSql & strarrQuery(lngCnt)
  mconLocal.BeginTrans()
  mconLocal.Execute(strSql)
  mconLocal.CommitTrans()
  strSql = ""
Next lngCnt
-->


Seul problème, pour les besoins de l'application il faudrait quand même pouvoir faire passer le gros bloc d'instructions en une fois afin d'être certain que toutes les instructions ont été éxécutées en même temps et non pas une partie.


j'espère avoir été assez claire dans la description de mon problème


Language utilisé : VB.NET (visual studio 2005) et SQL 2005


Merci d'avance pour toute aide dans la résolution de ce problème.


Vincent


 

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Ta première syntaxe devrait fonctionner.
As-tu pensé à mettre un point virgule ; à la fin de chaque instruction ?
Peut-être même, ajouter un "Go;" (je ne sais plus si le SQL server en a besoin)
A quoi ressemble ta strSql avant de la soumettre ?
As-tu vérifier qu'il ne manquait pas des espaces entre les mots ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
Essaye comme ceci, pour voir si ça marche mieux :
strSql = ""
lngCnt1 = 0
mconLocal.BeginTrans()

For lngCnt = 0 To lngarrCounter
  mconLocal.Execute(strarrQuery(lngCnt))
Next lngCnt
mconLocal.CommitTrans()
strSql = ""

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Oui, tu as raison Casy, voilà la bonne méthode.
Messages postés
2
Date d'inscription
vendredi 5 juin 2009
Statut
Membre
Dernière intervention
22 juin 2009

J'ai essayé t'as méthode Jack et avec le point virgule sa passe , yes.
Parcontre avec GO la rien, il me dit qu'il y a une erreur de syntaxe avant le GO
Pourtant si je copie le contenu de ma variable dans sql manager et je l'execute, il est heureux bizare.
exemple :
       insert into blablabla... ;
       GO
       update into blablabla ... ;
       GO

j'ai essayé t'as méthode Casy mais il me retourne
l'erreur suivante quand il passe pour la 2ème fois dans mconlocal.Execute :

'Error in command Aucune transaction n'est active'

et la je pige pas. J'ai l'impression qu'après il a fermé la connexion et que la seul chose que je puisse faire c'est un commit ou un rollback. Pourquoi ? Faut il faire qlqchse de special lors de la connexion ?

exemple de String utilisé pour faire la connexion:

Provider=SQLOLEDB.1;Initial Catalog=MAG1;Data Source=vincent-pc\sqlexpress;User ID=sa;Password=******;trusted_ connection = false"

Vincent