Frage

IDE = VS7 oder 2002

Hallo zusammen, ich hat ein wirklich seltsames Problem. Der Code wird nicht angezeigt, wie erwartet werden ausgeführt wird. Ich führe dies durch den Debugger und es ist wirklich seltsam durchgeführt wird.

Ich habe dafür gesorgt, dass das virtuelle Verzeichnis verwendet, ist ASP.NET 1.0.3705.

Der Code folgt und ich erklären, was der Debugger mich wie die Ausführungsschritte in den Kommentaren zeigt:

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 dieses seltsame Verhalten erlebt vor? Jede Idee, wie man es beheben? Ich kann das Verfahren ausführlich ändern, aber ich würde noch gerne wissen, warum dies geschieht.

Ich vermute, da die SQLE null ist, deshalb ist der Wurf verhält sich nicht wie erwartet. Aber warum haben wir springen in diesen Codeblock in erster Linie?

Ich habe es mehrmals neu geladen, gespeichert und wieder aufgebaut, und mit dem Debugger ausgeführt und beobachtete dieses Verhalten mehrmals.

Vielen Dank für Ihre Hilfe!

Alles Gute,

Graham

War es hilfreich?

Lösung

Bitte warten .. Code wirft keine Ausnahme und Sie sich fragen, warum sie nicht den catch-Block nicht ausführen?

EDIT (Referenzierung Ihren Kommentar):

Das klingt wirklich schwer zu glauben. Ich habe nie von einem Fall gehört, wo die eigentliche Ausnahme innerhalb der catch-Block null war und wie Sie bereits die erste Zeile in der catch-Block erwähnt habe nicht die meiner Meinung nach Punkten in die Richtung auszuführen, dass es keine Ausnahme überhaupt war.

Haben Sie versucht, den Programmablauf zu überprüfen, indem Sie mit altmodischen Debugging-Techniken (Debug.WriteLine) und Überspringen der Debugger?

Meine Vermutung ist, dass Sie an der falschen Stelle sind, wo die Ausnahme ausgelöst wird .. oder es gibt überhaupt keine Ausnahme.

Andere Tipps

Sehr seltsam. Ich bin mir nicht sicher, was mit Ihrem Code vor sich geht, aber eine Sache, die ich sah, ist die Verwendung von:

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
}

Sie wollen schreiben:

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

die Ausnahme erneut zu werfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top