Domanda

IDE = VS7 o 2002

Ciao a tutti, ho un problema davvero strano qui. Il codice non sembra essere in esecuzione come previsto. Io corro questo attraverso il debugger e sta eseguendo davvero strano.

Ho fatto in modo che la directory virtuale è utilizzando ASP.NET 1.0.3705.

Il codice segue e mi spiega che cosa il debugger mi mostra come le fasi di esecuzione nei commenti:

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

Qualcuno ha sperimentato questo strano comportamento prima? hai qualche idea su come aggiustarlo? Posso cambiare il metodo ampiamente, ma mi piace ancora di sapere perché questo sta accadendo.

Ho il sospetto che dal momento che la SQLE è nulla che è il motivo per cui il tiro non si comporta come previsto. Ma perché abbiamo saltare in questo blocco di codice, in primo luogo?

Ho ricaricato più volte, salvato e ricostruito, ed eseguito con il debugger e guardato questo comportamento più volte.

Grazie a tutti per il vostro aiuto!

Tutto il meglio,

Graham

È stato utile?

Soluzione

aspetta .. il codice non un'eccezione e vi state chiedendo perché non esegue il blocco catch?

Modifica (riferimento tuo commento):

Che suona davvero difficile da credere. Non ho mai sentito di un caso in cui l'eccezione reale all'interno del blocco catch era nulla e come già accennato fatto la prima linea all'interno del blocco catch non eseguire che a mio parere i punti nella direzione che non vi era alcuna eccezione a tutti.

Forse si tenta di controllare il flusso del programma utilizzando tecniche di debug vecchio stile (Debug.WriteLine) e saltare il debugger?

La mia ipotesi è che si sta cercando nel posto sbagliato in cui viene generata l'eccezione .. o non c'è non fa eccezione a tutti.

Altri suggerimenti

Molto strano. Non sono sicuro di quello che sta succedendo con il tuo codice, ma una cosa che ho visto è l'uso di:

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
}

Vuoi scrivere:

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

Per ri-generare l'eccezione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top