J'ai une instruction try-catch dans une instruction try-catch. Le catch interne intercepte l'erreur, mais le lancer ne provoque pas l'erreur dans l'instruction catch. Breifly, mon script est formaté similaire à:Powershell try/catch renvoyer ne pas propager l'erreur (Powershell 2.0)
$ErrorPreference = "Stop"
try
{
getStuffFromDB
putStuffInDB
}
catch
{
write-host ("Error: " + $error[0])
}
function getStuffFromDB
{
try
{
-- database query statement
}
catch
{
throw
}
finally
{
close connection and clean up
}
}
function putStuffInDB
{
try
{
-- database insert statements statement
}
catch
{
throw
}
finally
{
close connection and clean up
}
}
Quand je courais le script il n'y avait pas d'erreurs, mais j'ai remarqué la base de données SQL Server que je tentais de remplir été données manquantes. Lorsque j'ai relancé le script dans le débogage, la fonction 'putStuffInDB' avait une erreur qui a été interceptée dans le bloc catch. Mais quand je suis intervenu, le message n'a pas été «jeté» au bloc catch externe, mais a traité le bloc finally et s'est terminé.
Il me manque évidemment quelque chose que je ne vois pas. J'ai utilisé la construction en C# dans le passé et n'ai jamais eu de problèmes avec les erreurs qui ont été 'passées' au bloc catch externe.
Votre commentaire sur le niveau de gravité de SQL Server peut être associé à ce problème, même s'il n'est pas clair à ce stade. Mais, le bloc de capture interne attrape l'erreur et la repousse. C'est le bloc catch qui n'attrape pas l'erreur. En tant que test, dans ma déclaration d'insertion, j'ai mal orthographié un nom de colonne qui devrait générer un niveau de gravité suffisamment élevé, mais qui ne soit toujours pas pris dans le catch externe. – user459866
Avez-vous exécuté mon script? Sur ma machine, il s'exécute dans l'ordre attendu. Je ne suis pas sûr de ce qui pourrait être différent dans votre cas. – Josh