2015-03-05 3 views
1

J'exécute des requêtes sql en utilisant OSQL via la configuration d'inno. J'utilise le code suivant pour exécuter OSQL. Ceci est juste à titre d'exempleL'exécution de SQL Script à l'aide de OSQL ne retourne pas le code résultat

SQLQuery:= '"EXEC sp_addserver ''PCNAME'';"'; 
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery; 
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode); 

Cela fonctionne très bien. Le problème est ResultCode la valeur est toujours 0. Même si la requête n'est pas exécutée. Par exemple, si je tente même requête comme ci-dessous où je passe un nom de procédure stockée invalide le ResultCode est toujours 0.

SQLQuery:= '"EXEC sp_invalidname ''PCNAME'';"'; 
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery; 
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode); 

Pourquoi ne pas me retourner un code approprié. Si je lance la deuxième requête en studio de gestion, je reçois une erreur comme celle

Msg 2812, Level 16, State 62, Line 1 Could not find stored procedure 'sp_invalidname'

retour ici code est 2812. Pourquoi je ne reçois pas ça quand je le passe à Inno. Que dois-je faire pour obtenir ce code d'erreur dans inno?

Répondre

1

Grâce à TLama, j'ai mis à jour mon code comme ci-dessous et fonctionne maintenant. J'ai dû ajouter -b paramètre de ligne de commande et maintenant il renvoie 1 si la commande échoue.

-b Spécifie qu'osql se ferme et renvoie une valeur DOS ERRORLEVEL lorsqu'une erreur se produit. La valeur renvoyée à la variable DOS ERRORLEVEL est 1 lorsque le message d'erreur SQL Server a une gravité de 11 ou plus; sinon, la valeur renvoyée est 0. Les fichiers batch Microsoft MS-DOS peuvent tester la valeur de DOS ERRORLEVEL et gérer l'erreur de manière appropriée.

J'ai mis à jour mon code comme ci-dessous.

Param:= '-S(local) -Usa -Psa -b -Q ' + SQLQuery; 

Son expliqué dans le documentation.

+0

Ah, le '-Q' doit être suivi de la requête. J'ai mis le paramètre au mauvais endroit. – TLama

+0

Oui. Ma faute ne l'a pas remarqué avant. Merci quand même. – Newbee

+0

De rien! – TLama