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

Vincent4321 Messages postés 2 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 22 juin 2009 - 15 juin 2009 à 14:06
Vincent4321 Messages postés 2 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 22 juin 2009 - 22 juin 2009 à 18:16
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 juin 2009 à 18:08
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)
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 juin 2009 à 20:34
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2009 à 10:26
Oui, tu as raison Casy, voilà la bonne méthode.
0
Vincent4321 Messages postés 2 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 22 juin 2009
22 juin 2009 à 18:16
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
0
Rejoignez-nous