Logica ASP.NET / pool di connessioni e gestione degli errori
-
08-07-2019 - |
Domanda
Ho appena caricato il mio primo ASP.NET (come parte del mio apprendimento di vb.net) e sono entrato in un disastro terribile con il pool di connessioni (succedono cose divertenti quando ci sono più di 1 utente del tuo sito web) tutto ordinato ora usando meglio le dichiarazioni try catch (beh l'idea era di imparare) MA mi chiedevo se questo è il metodo migliore / finale, ora se il tentativo fallisce, allora MOLTO dei dettagli sulla pagina non sono posizionati / aggiornati , quindi se stai facendo un po 'di lavoro sul database e il tentativo fallisce, ricarichi la pagina ... reindirizza a se stesso e speri che funzioni la prossima volta ... o semplicemente informa l'utente che c'è stato un errore e dovrebbero riprovare?
Grazie
Soluzione
Dovresti usare le istruzioni " using
" per tutti gli oggetti che implementano IDisposable
(come connessioni e lettori). Un'istruzione "using" viene tradotta in un blocco try-finally sotto le copertine e garantisce che venga chiamato Dispose () anche se si verifica un errore.
Ecco un esempio di frammento di codice:
using (SqlConnection conn = new SqlConnection(this.connectionString))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "LoadFromRepository";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ID", fileID);
conn.Open();
using (SqlDataReader rdr =
cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (rdr.Read())
{
// do something with read data
}
}
}
}
Altri suggerimenti
Se si verifica un errore imprevisto, reindirizzare l'utente a una pagina di errore, poiché probabilmente accadrà anche la prossima volta.
Hai esaminato " Usare " dichiarazioni per connessioni DB e lettori?
Non reindirizzerei mai automaticamente e spero che funzionerà la prossima volta (potresti ottenere un ciclo infinito).
Informa l'utente e facoltativamente un link per riprovare.
Potresti anche voler analizzare la tua eccezione per vedere se un altro tentativo ti aiuterà. Alcune eccezioni sono in realtà dei bug e un altro tentativo non aiuterà.