Pergunta

IDE = VS7 ou 2002

Oi tudo, eu tenho um problema muito estranho aqui. O código não parece estar executando como esperado. Estou executando isso através do depurador e está realizando realmente estranha.

Eu tenho a certeza que o diretório virtual está usando ASP.NET 1.0.3705.

O código segue e eu explique o que o depurador mostra mim como as etapas de execução nos comentários:

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

Alguém já experimentou este comportamento estranho antes? Alguma idéia de como consertar isso? Eu posso mudar o método extensivamente, mas eu ainda gostaria de saber porque isso está acontecendo.

Eu suspeito desde o SQLE é nulo é por isso que o lance não se comporta como esperado. Mas por que nós saltar para este bloco de código em primeiro lugar?

Eu recarregado várias vezes, salvo e reconstruído, e executado com o depurador e observou esse comportamento várias vezes.

Obrigado a todos por sua ajuda!

Todo o melhor,

Graham

Foi útil?

Solução

Espera .. seu código não lançar uma exceção e você está se perguntando por que ele não executa o bloco catch?

EDIT (referenciar a sua comentário):

Isso soa realmente difícil de acreditar. Nunca ouvi falar de um caso em que a exceção real dentro do bloco catch foi nula e como você já mencionou fez a primeira linha dentro do bloco catch não executar que nos meus pontos de opinião no sentido de que não havia exceção em tudo.

Você quis tentar verificar o fluxo do programa usando técnicas de depuração antiquados (Debug.WriteLine) e pular o depurador?

A minha suposição é que você está procurando no lugar errado onde a exceção é lançada .. ou não há nenhuma exceção em tudo.

Outras dicas

Muito estranho. Eu não tenho certeza do que está acontecendo com o seu código, mas uma coisa que eu vi é o uso 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
}

Você quer escrever:

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

Para voltar a lançar a exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top