IDE = VS7 oder 2002Ausnahmebehandlung - Zeile übersprungen und sqle ist null
Hallo zusammen, ich habe hier ein wirklich seltsames Problem. Der Code scheint nicht wie erwartet ausgeführt zu werden. Ich führe das durch den Debugger und es funktioniert wirklich seltsam.
Ich habe sichergestellt, dass das virtuelle Verzeichnis ASP.NET 1.0.3705 verwendet.
Der Code folgt und ich erklären, was der Debugger zeigt mir, wie die Ausführungsschritte in den Kommentaren:
try
{
objConnection.Open(); // STARTS HERE
objCommand.ExecuteNonQuery(); // DOES NOT THROW EXCEPTION
int c = 0; // THIS LINE IS EXECUTED
}
catch (SqlException sqle)
{
LogError(); // THIS LINE IS NOT EXECUTED
throw sqle; // THIS LINE IS EXECUTED AFTER THE int c = 0;
// sqle IS NULL
// EXCEPTION IS NOT CAUGHT AND
// EXECUTION CONTINUES IN FINALLY BLOCK
}
finally
{
// EXECUTES AS EXPECTED FROM HERE ON OUT,
// AS THOUGH THE throw sqle; DID NOT HAPPEN.
if (objConnection.State == ConnectionState.Open) objConnection.Close();
}
Hat jemand vor diesem seltsamen Verhalten erlebt? Irgendeine Idee, wie man es repariert? Ich kann die Methode ausgiebig ändern, aber ich möchte immer noch wissen, warum das passiert.
Ich vermute, da die sqle null ist, deshalb der Wurf nicht wie erwartet verhält. Aber warum sind wir überhaupt in diesen Codeblock gesprungen?
Ich habe es mehrmals neu geladen, gespeichert und neu erstellt und mit dem Debugger ausgeführt und dieses Verhalten mehrere Male beobachtet.
Vielen Dank für Ihre Hilfe!
Alles Gute,
Graham
itsmatt und David, Das Problem, soweit ich das beurteilen kann, ist mit dem Debugger. Ich folgte Davids Ratschlag, Debug.WriteLine() zu verwenden. Ich hatte einen anderen Code, der ähnliche Probleme hatte. Eine Ausnahme sollte aufgetreten sein, aber nicht. Der Debugger sah sich die if-Anweisung an und entschied, dass er den Code innerhalb ausführen sollte - was eine Ausnahme verursachen sollte. Mit Blick auf die WriteLine-Anweisungen kann ich sehen, dass der Codeblock innerhalb der if-Anweisung nicht wirklich ausgeführt wurde. Es ist ein Unterschied, wie der Debugger denkt, dass der Code ausgeführt wird und wie er ausgeführt wird. Danke für Ihre Hilfe –
Schön das zu hören. Klingt wie die kompilierte Assembly, die der Debugger betrachtet, älter als die Quelle ist. Sie könnten versuchen, den Ordner/bin zu löschen und das Projekt erneut zu erstellen. – VVS