[Déplacé .Net --> VBS] Probleme reconnexion ADODB lors de perte de connexion SQ

Résolu
Ouistyty Messages postés 7 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 9 février 2010 - 9 févr. 2010 à 10:24
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 9 févr. 2010 à 19:39
Bonjour,

Je ne sais pas si je suis dans la bonne section des forums ici mais bon, je pose ma question quand même.

J'ai un script qui boucle à toutes les 5 minutes et qui requête en base de donnée. Tout ce passe bien jusqu'à ce qu’il y ait un problème de connexion à la base de donnée.

Une fois que le script perd la connexion à la base de données, il est impossible qu’il se reconnecte par la suite même si la base revient en ligne. Le seul moyen de rétablir le tout, est d’arrêter et relancer le script.

Quand la base de donnée est injoignable, j’ai le message d’erreur suivant : -2147467259:[Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]SQL Server does not exist or access denied.

Et Quand la base revient en ligne, j’ai le message suivant : 424:Objet requis

Auriez-vous des idées à me donner afin de pouvoir gérer ce problème sans avoir à relancer le script ?

Voici le bout de code qui effectue la connexion, toute remarque constructive sur ce dernier sera considérée et appréciée.

Merci d’avance

Christian


Do While MyExit=0
Print_Log Log_File, "Launching VBS in 5 minutes !"	
WScript.Sleep(300000)

'Vérification de la version du vbs local
LocalVbsFileVer=CheckLocalVer(LocalVbsFileName)
Print_Log Log_File, "Local HeartBeat File Version : " & LocalVbsFileVer
LocalVbsLibVer=CheckLocalVer(LocalVbsLibName)
Print_Log Log_File, "Local Library File Version : " & LocalVbsLibVer
LocalVbsMainVer=CheckLocalVer(LocalVbsMainName)
Print_Log Log_File, "Local Main File Version : " & LocalVbsMainVer

' Connexion à SQL Server.
Print_Log Log_File, "Connectiong to SQL ..."
Set oCn = WScript.CreateObject("ADODB.Connection")
oCn.ConnectionString = "Driver={SQL Server};" & _
                 "Server=monserver;" & _
                 "Address=monserver,1433;" & _
                 "Network=DBMSSOCN;" & _
                 "Database=mabase;" & _
                 "user id=monuser;" & _
                 "password=monpass;"
oCn.Open
If Err.number <> 0 Then
Print_Log Log_File, "Not Able To Connect to SQL Server !"
Print_Log Log_File, Err.Number & ":" & Err.Description
Set Err.number = 0
oCn.ConnectionString
Set oCn = Nothing
Else
Print_Log Log_File, "Controlling files version ..."
ControlFileVer LocalVbsFileName,LocalVbsFileVer
ControlFileVer LocalVbsLibName,LocalVbsLibVer
ControlFileVer LocalVbsMainName,LocalVbsMainVer
Print_Log Log_File, vbtab & "Getting System Info..."
MyResult = split(ExecCommand("cscript.exe //H:CScript //nologo //T:60 " & LocalVbsFileName),vbcrlf)
Print_Log Log_File, vbtab & "Command Output :"
For each StrLine in MyResult
Print_Log Log_File, vbtab & vbtab & StrLine
Next
oCn.Close
Set oCn = Nothing
End If

Loop

4 réponses

Ouistyty Messages postés 7 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 9 février 2010
9 févr. 2010 à 17:16
Whouhou !

J’ai réussi à régler mon problème.

En fait ce qui causait problème était la méthode utilisée pour réinitialisé le Err.number
Il fallait utilisée Err.Clear
au lieu de Err.number=0

Maintenant, tout passe nickel !

Merci pour votre aide.

La boucle ressemble finallement a :

Do While MyExit=0
Print_Log Log_File, "Launching VBS in 5 minutes !"	
WScript.Sleep(300000)

'Vérification de la version du vbs local
LocalVbsFileVer=CheckLocalVer(LocalVbsFileName)
Print_Log Log_File, "Local HeartBeat File Version : " & LocalVbsFileVer
LocalVbsLibVer=CheckLocalVer(LocalVbsLibName)
Print_Log Log_File, "Local Library File Version : " & LocalVbsLibVer
LocalVbsMainVer=CheckLocalVer(LocalVbsMainName)
Print_Log Log_File, "Local Main File Version : " & LocalVbsMainVer

' Connexion à SQL Server.
Print_Log Log_File, "Connectiong to SQL ..."
Set oCn = WScript.CreateObject("ADODB.Connection")
oCn.ConnectionString = "Driver={SQL Server};" & _
                 "Server=monserver;" & _
                 "Address=monserver,1433;" & _
                 "Network=DBMSSOCN;" & _
                 "Database=mabase;" & _
                 "user id=monuser;" & _
                 "password=monpass;"
oCn.Open
If Err.number <> 0 Then
Print_Log Log_File, "Not Able To Connect to SQL Server !"
Print_Log Log_File, Err.Number & ":" & Err.Description
Err.Clear
Else
Print_Log Log_File, "Controlling files version ..."
ControlFileVer LocalVbsFileName,LocalVbsFileVer
ControlFileVer LocalVbsLibName,LocalVbsLibVer
ControlFileVer LocalVbsMainName,LocalVbsMainVer
Print_Log Log_File, vbtab & "Getting System Info..."
MyResult = split(ExecCommand("cscript.exe //H:CScript //nologo //T:60 " & LocalVbsFileName),vbcrlf)
Print_Log Log_File, vbtab & "Command Output :"
For each StrLine in MyResult
Print_Log Log_File, vbtab & vbtab & StrLine
Next
oCn.Close
End If
Set oCn = Nothing

Loop


Merci encore.

Christian
3
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
9 févr. 2010 à 12:33
Salut Christian
(aucune expérience en vbs, alors ...)

Il faudrait que tu regardes à quoi sert ta ligne oCn.ConnectionString dans ta gestion d'erreur.
A mon avis, elle ne sert à rien ou il manque un = "" --> Peut être à l'origine de l'erreur 424

Pour que ton test de Err.Number <> 0 fonctionne, il ne faut pas que la gestion d'erreur soit active.
Vois s'il existe un On Error Resume Next en vbs

A l'inverse, après la connexion, il faudrait peut-être gérer les erreurs.
Un On Error Goto monLabelErreur te permettrait de dérouter le programme afin de refermer la connexion puis de la réouvrir | relancer ta boucle.

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Ouistyty Messages postés 7 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 9 février 2010
9 févr. 2010 à 16:26
Bonjour,

Merci pour la réponse.

L'option "on error resume next" est bien ative au début du script vbs et bien fonctionnelle.

Effectivement, ma ligne dans le bloc de gestion d'erreur "oCn.ConnectionString" était erronnée, je voulais la réinitialisée à vide et il manquait le = "".

Peux-tu m'expliquer un peu plus tes propos quand tu parles de "Un On Error Goto monLabelErreur te permettrait de dérouter le programme afin de refermer la connexion puis de la réouvrir | relancer ta boucle"
Cette solution pourrait peut être fonctionner :)
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
9 févr. 2010 à 19:39
Ah, bien vu
En plus, je l'ai lu, mais je n'ai pas tilté.
Désolé
0
Rejoignez-nous