Richiesta chiarimento gestione eccezioni VB2010

martedì 13 novembre 2012 - 10.12
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server Express

alsa Profilo | Junior Member

Salve ragazzi,
ho praticamente terminato il mio progetto Windows Form ma ho lasciato per ultimo una cosa molto molto importante come l' inserimento dei blocchi "try catch" per la gestione delle eccezioni.
Ammetto di essere molto impreparato in materia quindi vorrei delle delucidazioni da voi, abbiate pazienza.

In particolare vorrei sapere, se ho una parte di codice nella quale vengono eseguite diverse operazioni il blocco deve prevedere il "try" iniziale e i "catch" con tutte le possibili eccezioni al termine, o un catch per ogni operazione che può generare un eccezione?

Entrando più nel dettaglio, nel mio progetto utilizzo un dataset sfruttando ovviamente i suoi metodi e, per esempio, il metodo "fill" può generare la seguente eccezione:
http://msdn.microsoft.com/it-it/library/vstudio/system.systemexception(v=vs.100).aspx
Ma in pratica, come andrebbe gestita? Con un semplice messaggio che invita a contattare l' assistenza?

Ringrazio subito chi vorrà aiutarmi.

ridaria Profilo | Expert

>Salve ragazzi,
>ho praticamente terminato il mio progetto Windows Form ma ho
>lasciato per ultimo una cosa molto molto importante come l' inserimento
>dei blocchi "try catch" per la gestione delle eccezioni.

direi che è di estrema importanza stante la fatalità delle conseguenze. Se l'errore non è gestito a quel poverino dell'utente gli si chiude l'applicazione, poi ti chiamano, e spiazzatissimi, non sanno neanche cosa dirti. et u fai fatica a capire cosa è accaduto.


>Ammetto di essere molto impreparato in materia quindi vorrei
>delle delucidazioni da voi, abbiate pazienza.
>
>In particolare vorrei sapere, se ho una parte di codice nella
>quale vengono eseguite diverse operazioni il blocco deve prevedere
>il "try" iniziale e i "catch" con tutte le possibili eccezioni
>al termine, o un catch per ogni operazione che può generare un
>eccezione?

Il minimo che occorre é:

Try
..codice ordinario da eseguire
se qui va in errore lui salta nel blocco catch dove il minimo da inserire é quello che ci ho inserito io.

Catch ex As Exception

MsgBox(ex.Message, MsgBoxStyle.Critical)
'mostri all'utente un messaggio con gli elementi base dell'erore.
End try


>Entrando più nel dettaglio, nel mio progetto utilizzo un dataset
>sfruttando ovviamente i suoi metodi e, per esempio, il metodo
>"fill" può generare la seguente eccezione:
>http://msdn.microsoft.com/it-it/library/vstudio/system.systemexception(v=vs.100).aspx
>Ma in pratica, come andrebbe gestita? Con un semplice messaggio
>che invita a contattare l' assistenza?

qui sei tu a decidere cosa metterci, solo il messaggio di errore, un invito a chiamare l'assistenza o ciò che vuoi.


Ti invito comunque a dare una bella lettura alla gestione degli errori, è una parte importante di un software.
http://msdn.microsoft.com/it-it/library/fk6t46tz%28v=vs.71%29.aspx

ciao



Riccardo D'Aria

Vinsent Profilo | Senior Member

Prova a dare un' occhiata anche qui:
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_dotNET/Gestione_degli_errori/
http://www.pierotofy.it/pages/guide_tutorials/Visual_Basic/Scegliere_il_tipo_di_eccezione_pi_adatta/
Di seguito un esempio, è una form con una textbox e un button dove si genera un eccezione assegnando il valore della textbox alla variabile di tipo byte.
Le eccezioni specifiche che vengono intercettate sono due:
OverflowException se nella textbox viene inserito un numero maggiore di 255
InvalidCastException se nella textbox viene inserito un "non numero"...
Il terzo Catch intercetta tutte le altre.
NB: Il blocco Finally viene eseguito SEMPRE a prescindere che ci sia o meno un' eccezione. Le variabili dichiarate all' interno dei singoli blocchi non sono visibili all' esterno.

Public Class Form1 Dim a As Byte Private Sub Button1_Click() Handles Button1.Click Dim errore As Boolean = False Dim tipo As Integer Dim errorMsg As String Dim log As String Try a = TextBox1.Text Catch ovrEX As System.OverflowException errore = True log = ovrEX.ToString errorMsg = ovrEX.Message tipo = 1 Catch castEX As System.InvalidCastException errore = True log = castEX.ToString errorMsg = castEX.Message tipo = 2 Catch genEX As Exception errore = True log = genEX.ToString errorMsg = genEX.Message tipo = 3 Finally If errore = True Then 'questa varabile non è visibile all' esterno Dim msg As String If tipo = 1 Then msg = "Inserire numeri da 0 a 255" End If If tipo = 2 Then msg = "Lettere non ammesse" End If If tipo = 3 Then msg = "Errore non previsto" End If MsgBox(msg & vbCrLf & vbCrLf & _ "errore: " & vbCrLf & errorMsg & _ vbCrLf & vbCrLf & _ "errore completo: " & vbCrLf & log) Else MsgBox("OK!") End If End Try End Sub End Class

Ciao!
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5