Question

IDE = VS7 ou 2002

Salut à tous, j'ai un problème vraiment bizarre ici. Le code ne semble pas être l'exécution comme prévu. Je suis en cela par le débogueur et il est vraiment étrange exécution.

Je me suis assuré que le répertoire virtuel est en ASP.NET 1.0.3705.

Le code suit et j'expliquer ce que le débogueur me montre les étapes d'exécution dans les commentaires:

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();
}

Quelqu'un at-il vécu ce comportement étrange avant? Toute idée de comment résoudre ce problème? Je peux changer la méthode extensive, mais je voudrais encore savoir pourquoi ce qui se passe.

Je soupçonne depuis le SQLE est nul qui est la raison pour laquelle le jet ne se comporte pas comme prévu. Mais pourquoi avons-nous sauter dans ce bloc de code en premier lieu?

Je l'ai rechargé plusieurs fois, sauvé et reconstruit, et exécuté avec le débogueur et regardé ce comportement plusieurs fois.

Merci à tous pour votre aide!

Cordialement,

Graham

Était-ce utile?

La solution

Attendez .. votre code ne jette pas une exception et vous vous demandez pourquoi il n'exécute pas le bloc catch?

EDIT (référencement de votre commentaire):

Cela semble vraiment difficile à croire. Je ne ai jamais entendu parler d'un cas où l'exception réelle à l'intérieur du bloc de capture était nulle et que vous avez déjà mentionné fait la première ligne à l'intérieur du bloc catch n'exécute pas qui mes points d'opinion dans la direction qu'il n'y avait pas exception à tous.

Avez-vous essayé de vérifier le déroulement du programme en utilisant des techniques de débogage ancienne (Debug.WriteLine) et sauter le débogueur?

Je suppose que vous cherchez au mauvais endroit où l'exception est levée .. ou il n'y a pas du tout exception.

Autres conseils

Très étrange. Je ne sais pas ce qui se passe avec votre code, mais une chose que j'ai vu est l'utilisation de:

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
}

Vous voulez écrire:

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

Pour re-jeter l'exception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top