Pregunta

IDE = VS7 o 2002

Hola a todos, tengo un problema muy raro aquí. El código no parece estar ejecutando según lo esperado. Me estoy quedando esto a través del depurador y se está realizando realmente extraña.

Me he asegurado de que el directorio virtual está utilizando ASP.NET 1.0.3705.

El código siguiente y me explica lo que el depurador me muestra como los pasos de ejecución en los comentarios:

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

¿Alguien ha experimentado este extraño comportamiento antes? ¿Alguna de idea de cómo arreglarlo? Puedo cambiar el método ampliamente, pero todavía me gustaría saber por qué ocurre esto.

Sospecho ya que el sqle es nula de que es la razón de banda no se comporta como se esperaba. Pero ¿por qué saltar a este bloque de código en el primer lugar?

He recargado varias veces, salvado y reconstruido, y ejecutado con el depurador y observó este comportamiento varias veces.

Gracias a todos por su ayuda!

Todo lo mejor,

Graham

¿Fue útil?

Solución

Espera .. su código no produce una excepción y se pregunte por qué no se ejecuta el bloque catch?

Edit (incluir su comentario):

Eso suena muy difícil de creer. Nunca oí hablar de un caso en que la excepción real dentro del bloque catch era nula y como ya se ha mencionado hice la primera línea dentro del bloque catch no ejecutar lo que a mis puntos de opinión en el sentido de que no había ninguna excepción en absoluto.

¿trató de comprobar el flujo del programa mediante el uso de técnicas de depuración anticuados (Debug.WriteLine) y saltar al depurador?

Mi suposición es que usted está buscando en el lugar equivocado en el que se produce la excepción .. o hay ninguna excepción en absoluto.

Otros consejos

Muy extraño. No estoy seguro de lo que está pasando con su código, pero una cosa que vi es el 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
}

¿Quieres escribir:

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

Para volver a emitir la excepción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top