Ich habe eine try-catch-Anweisung innerhalb einer try-catch-Anweisung. Der innere Fang fängt den Fehler ab, aber der Wurf führt nicht dazu, dass der Fehler in der Out-Catch-Anweisung gefangen wird. Breifly, mein Skript ist so formatiert, ähnlich wie:Powershell try/catch retrow nicht propagierenden Fehler (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
}
}
Als ich das Drehbuch lief es keine Fehler aufgetreten sind, aber ich merkte, die SQL Server-Datenbank, die ich versucht wurde zu füllen wurde fehlenden Daten. Wenn ich das Skript in debug erneut ausgeführt habe, hatte die Funktion 'putStuffInDB' einen Fehler, der im catch-Block abgefangen wurde. Aber als ich trat, wurde die Nachricht nicht zum äußeren Catch-Block "geworfen", sondern der finally-Block verarbeitet und beendet.
Ich vermisse offensichtlich etwas, das ich nicht sehe. Ich habe das Konstrukt in C# in der Vergangenheit verwendet und hatte nie Probleme mit Fehlern, die an den äußeren Catch-Block "weitergegeben" wurden.
Ihr Kommentar zum SQL Server-Schweregrad kann etwas damit zu tun haben, obwohl es zu diesem Zeitpunkt noch nicht klar ist. Aber der innere catch-Block fängt den Fehler und wiederholt es. Es ist der Out-Catch-Block, der den Fehler nicht erfasst. Als Test schrieb ich in meiner insert-Anweisung einen Spaltennamen falsch, der einen ausreichend hohen Schweregrad erzeugen sollte, aber immer noch nicht im äußeren Fang gefangen wird. – user459866
Haben Sie mein Skript ausgeführt? Auf meinem Computer wird es in der erwarteten Reihenfolge ausgeführt. Ich bin mir nicht sicher, was sonst in deinem Fall anders sein könnte. – Josh