Ripetere istruzione dopo Try-Catch

giovedì 16 aprile 2009 - 13.20

TaiChi Profilo | Junior Member

Salve a tutti

uso questo codice per caricare i dati da un db

//nel costruttore del form

AggiornaDati()

private void AggiornaDati()
try
{
//prova a caricare i dati del db
...
...
}
catch(SQLiteException ex)
{
CercaDB()
}

La domanda è questa, dopo aver trovato il DB con CercaDB come posso ripetere da capo AggiornaDati?


Grazie
Alessio Forconi

aiedail92 Profilo | Expert

Ciao

Puoi fare in modo che la funzione richiami sè stessa, però devi fare qualche accorgimento per evitare che si esegua un ciclo infinito.

In alternativa, puoi fare un semplice goto (anche se solitamente ne viene sconsigliato l'utilizzo per la leggibilità del codice)

Ad esempio, potresti fare così:

Costruttore() { AggiornaDati(); } //Questa funzione serve per non doverti riscrivere tutte le volte il parametro //(nel caso ti scordi) o ti dà fastidio void AggiornaDati() { AggiornaDati(1); } void AggiornaDati(int tentativi) { try { //Prova a caricare } catch (SQLiteException ex) { if(tentativi > 0) { CercaDB(); //Richiama la funzione stessa, ma col parametro diminuito di 1 //in questo modo la prossima volta non farà un altro tentativo AggiornaDati(tentativi - 1); } } }

Oppure così:

Costruttore() { AggiornaDati(); } void AggiornaDati() { //Il numero di tentativi ancora da svolgere int tentativi = 1; start: try { //Prova a caricare } catch (SQLiteException ex) { //Se sono rimasti dei tentativi, li rifà if(tentativi > 0) { CercaDB(); //Decrementa il numero di tentativi rimasti tentativi--; //Riesegue la funzione goto start; } } }

Il codice l'ho scritto al volo, dovrebbe funzionare ma se ci sono problemi dimmelo

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5