2010-09-02 4 views
2

Je n'arrive pas à obtenir NAnt pour abandonner ma construction lorsqu'il rencontre une erreur. Voici une des nombreuses sqlcmd.exe exécutions:NAnt, sqlcmd.exe et les codes d'erreur

<property name="test" value=""/> 
<exec program="sqlcmd.exe" resultproperty="test" failonerror="true" 
     basedir="${sqlcmd.dir}" commandline="${commandline.script}" verbose="true"> 
    <arg value="${filename}" /> 
    <arg value="-v databaseName=&quot;${Database.Name}&quot;" /> 
</exec> 
<echo message="Result: ${test}"/> 

Quand je frappe cette étape, je me retrouve avec une erreur due à (dans ce cas) une virgule manquante. Voici le résultat:

[exec] Starting 'C:\...\sqlcmd.exe (-E -S (local) -e -d "Core" 
     -i "C:\...\Associations.sql" -v databaseName="Core")' 
     in 'C:\...\Scripts' 
[exec] <snip - lots of SQL> 
[exec] Msg 102, Level 15, State 1, Server <snip>, Line 7 
[exec] Incorrect syntax near 'CreatedDate'. 
[exec] Msg 319, Level 15, State 1, Server <snip>, Line 11 
[exec] Incorrect syntax near the keyword 'with'. If this 
     statement is a common table expression, an xmlnamespaces 
     clause or a change tracking context clause, the previous 
     statement must be terminated with a semicolon. 
[echo] Result: 0 

erreur assez méchant, et pourtant sqlcmd.exe semble définir le code de retour à 0.

Toutes les idées pour vous assurer que mon script avorte quand je manque une virgule ?

Répondre

7

Avez-vous essayé de définir l'option -b? Cela définira ERRORLEVEL à 1 lorsqu'une erreur se produit. Pourrait aider Nant à décider.

+0

Excellent, cela a fait l'affaire. Merci beaucoup! – ladenedge

1

Le documentation for sqlcmd.exe semble indiquer que vous devez passer le commutateur -r pour envoyer des erreurs à stderr que Nant utilise pour vérifier les erreurs.

+0

Malheureusement, passer '-r 1' ne semble pas changer le résultat de la commande. – ladenedge