Visual Basic.NET La Gestione degli Errori di Federico BARBATI



Documenti analoghi
Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

RISOLUTORE AUTOMATICO PER SUDOKU

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

COSTER. Import/Export su SWC701. SwcImportExport

MAGAZZINO FISCALE (agg. alla rel )

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

Figura 1 Le Icone dei file di Excel con e senza macro.

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

2.7 La cartella Preparazioni e CD Quiz Casa

Funzioni in C. Violetta Lonati

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

ACO Archiviazione Elettronica e Conservazione sostitutiva

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Database 1 biblioteca universitaria. Testo del quesito

Invio SMS. DM Board ICS Invio SMS

Sistema di gestione Certificato MANUALE PER L'UTENTE

ISI s.r.l. Corso di Access 05 CREARE UN ELENCO MAILING ED INVIARE MESSAGGI DI POSTA ELETTRONICA Pag. 1/6

Installazione e caratteristiche generali 1

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

- DocFinance Manuale utente

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Software Gestionale per alberghi e strutture ricettive

Gestione Filtri. InfoBusiness 2.8 Gestione Filtri Pag. 1/ 11

ELENCO CLIENTI FORNITORI Patch1

Sistema Banca dati e Repertorio dei dispositivi medici Notifiche multiple di DM simili

developed by Emanuele De Carlo

GUIDA ALLA PROMOZIONE SUL SITO

Registratori di Cassa

Guida al backup e aggiornamento del programma MIDAP

Algebra Booleana ed Espressioni Booleane

Matematica 1 - Corso di Laurea in Ingegneria Meccanica

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

Il sistema C.R.M. / E.R.M.

On-line Corsi d Informatica sul web

ESEMPIO 1: eseguire il complemento a 10 di 765

Manuale Operativo Risk Manager

Gestione delle Presenze WorkFlow Manuale Operativo

I file di dati. Unità didattica D1 1

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

BIBLIO. Fabio Cannone Consulente Software. Settembre fabcanno@gmail.com -

SIRTEL. Sistema Informativo per la Rendicontazione Telematica degli Enti Locali. Schema di funzionamento del processo per l Ente Locale

L interfaccia utente di Office 2010

Il calendario di Windows Vista

Schede ADI ADP ADEM Prestazioni aggiuntive MMG. - Manuale - Data Solution Provider s.r.l.

4. Un ambiente di sviluppo per Java

Convertitori numerici in Excel

Struttura logica di un programma

Dispensa di database Access

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

File Server Resource Manager (FSRM)

HORIZON SQL PREVENTIVO

Fattura Facile. In questo menù sono raggruppati, per tipologia, tutti i comandi che permettono di gestire la manutenzione degli archivi.

Utilizzo del linguaggio Basic utilizzando l interfaccia di Excel Silvia Patacchini

Esercizio data base "Biblioteca"

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

MANUALE ESSE3 Gestione Registro delle lezioni

GESGOLF SMS ONLINE. Manuale per l utente

CRM Configurazione e gestione accessi

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.

Gestione della memoria centrale

Per utilizzare il sistema VCP il programmatore deve inserire una porzione di codice di VCP nella sua applicazione.

RAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Workland CRM. Workland CRM Rel /11/2013. Attività --> FIX. Magazzino --> NEW. Nessuna --> FIX. Ordini --> FIX

Manuale Terminal Manager 2.0

Outlook Plugin per VTECRM

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Introduzione alla teoria dei database relazionali. Come progettare un database

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Guida all uso di Java Diagrammi ER

La Stampa Unione. Individuare la lista indirizzi per la Stampa Unione

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Panoramica: che cosa è necessario

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

GUIDA AL CHART TRADING

Informazioni generali sul programma:

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

CamiGas-Digigas: Manuale Referente

ALBO PRETORIO WEB MANUALE DELLA PROCEDURA SOMMARIO. Uso del manuale. Informazioni generali. Interfaccia grafica. Guida di riferimento

Metodi Stocastici per la Finanza

4 3 4 = 4 x x x 10 0 aaa

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

GUIDA ALLE SOLUZIONI

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Programmazione avanzata con Visual Basic 2005

Codifica: dal diagramma a blocchi al linguaggio C++

Word processor funzione Stampa Unione

Creare un sito Multilingua con Joomla 1.6

Guida Rapida all uso del License Manager di ROCKEY4Smart (V )

GUIDA ALLA GESTIONE DEI TICKET REV. 1. guida_gestione_tck_rev1.doc - 1 di 9

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

DATA BASE ON LINE (BANCA DATI MODULI SPERIMENTALI)

Istruzioni per la configurazione di IziOzi

Matematica in laboratorio

MICHELANGELO Piattaforma autorizzativa per la gestione di interventi riservata ai fornitori

Transcript:

Generalità Visual Basic.NET La Gestione degli Errori di Federico BARBATI La gestione degli errori, è una parte fondamentale di un codice ben progettato. Fino ad oggi, gli errori nelle applicazioni scritte in Visual Basic venivano gestite con le istruzioni ON ERROR GOTO e ON ERROR RESUME NEXT. Visual Basic.Net supporta le vecchie istruzioni tuttavia, questa gestione è considerata una cattiva abitudine dato che è stata introdotta una nuova gestione strutturata utilizzando l istruzione: Catch Finally. Il problema legato alla gestione degli errori tradizionale è che non esiste una metodologia comune. Ci sono per esempio delle DLL che notificano un errore con uno 0 altre invece con un 1. Alcuni linguaggi di programmazione hanno dei propri meccanismi COM altri come C++, adottano il meccanismo delle eccezioni. Per ottenere l interoperabilità tra i vari linguaggi, con il Framework.Net è stato introdotto un metodo unico per la gestione degli errori comune a tutti i linguaggi.net: la generazione/intercettazione degli errori basato sulle eccezioni. Quando durante l esecuzione di un applicazione si verifica una condizione inaspettata (e quindi non gestita dallo sviluppatore), il codice solleva un eccezione che altro codice dovrà intercettare. L eccezione può essere intercettata dal codice della stessa procedura che ha sollevato l errore. Se questo non accade, l eccezione viene sollevata al chiamante e se quest ultimo non l intercetta, al chiamante del chiamante. Per cui l eccezione risale fino a quando non viene intercettata da qualche procedura (logica top-down). Se non esiste nella nostra applicazione una procedura in grado di intercettare l eccezione, verrà visualizzata in automatico una finestra di questo tipo: Questo vuol dire che con VB.Net, non ci sarà un uscita brusca dal programma (con una probabile perdita di dati) come accade con VB6, ma si avrà la possibilità di ignorare l errore e quindi continuare con l esecuzione dell applicazione. In effetti, quando viene sollevata un eccezione, viene passata alla procedura che ha provocato l errore, un oggetto Exception, il quale metterà a disposizione i suoi metodi e le sue proprietà. Tra le proprietà più utilizzate troviamo: Message: Restituisce la descrizione dell eccezione come Err.Description in VB6; Source: Indica dove si verifica l eccezione come Err.Source in VB6; StackTrace: Partendo dal metodo che ha restituito l eccezione, restituisce anche tutti i metodi chiamanti; TargetSite: Restituisce nome e firma del metodo che ha sollevato l eccezione. Il metodo ToString restituisce la descrizione dell eccezione come verrebbe mostrata all utente finale nel caso in cui non ci fosse una gestione da parte del codice. Oltre a mostrare il contenuto della proprietà Message, restituisce anche il nome del modulo sorgente. L oggetto Exception, è definito all interno del Framework.Net ed il suo namespace è: System.Exception, tuttavia le applicazioni sollevano gli errori ereditando dai namespace:

System.SystemException (che eredita direttamente da System.Exception) System.ApplicationException. In definitiva, tutte le eccezioni definite nel Framework.Net ereditano da System.Exception mentre tutte le eccezioni personalizzate dall utente all interno di un applicazione, ereditano da System.ApplicationException. Per esempio il namespace System.IO può sollevare un eccezione System.DirectoryNotFoundException (directory non trovata) o System.FileNotFoundException (File non trovato), mentre una divisione può sollevare l eccezione System.DivideByZeroException (divisione per 0) che a loro volta ereditano direttamente da System.Exception (l elenco completo è contenuto nella documentazione originale dell SDK installata con Visual Studio.Net). L Istruzione Catch Finally Quando si esegue un codice che potrebbe sollevare un eccezione, è bene inserirlo in un costrutto..end. Ad esempio: Valore1 = 2 MessageBox.Show(provaEx.Message) End Da notare che le tre variabili verranno dichiarate tutte Integer mentre in VB6 le prime due erano Variant e solo la terza (Valore2) era Integer. Inoltre \ effettua una divisione tra interi mentre / effettua una divisione in virgola mobile, Se il codice tra e Catch provoca un errore, Visual Basic, passerà il controllo al blocco Catch, inversamente ignorerà tutto quello dopo il Catch. In questo caso verrà restituito alla procedura, un oggetto provaex di tipo System.Exception e mediante un MessageBox verrà visualizzata la proprietà provaex.message la quale restituisce la descrizione dell eccezione. In quest ultimo caso, non abbiamo sfruttato la flessibilità dell istruzione dato che il filtro del blocco Catch è impostato sul generico tipo Exception. Per questo motivo, per ottenere un controllo più selettivo, useremo più blocchi Catch ognuno dei quali verifica un diverso tipo Exception. Valore1 = 2 Catch provaex As DivideByZeroException MessageBox.Show("Divisione per 0!", "Eccezione:") End Visual Basic confronta l eccezione sollevata con le espressioni contenute nelle clausole Catch nell ordine in cui sono scritte.

In questo caso siamo in grado di intercettare una errore di divisione per 0, oppure un overflow e di conseguenza inserire il codice per la gestione più adatto. Ad esempio, quando si verifica un eccezione DivideByZeroException, potremmo richiedere all utente un nuovo valore per la variabile Valore2. Tuttavia è bene inserire alla fine un blocco Catch generico in grado di intercettare tutti i tipi di eccezione. E possibile uscire da un End invocando l istruzione Exit che può apparire anche nei blocchi Catch. Il runtime del.net definisce automaticamente alcune eccezioni che si verificano in condizioni non dipendenti dal programma ma dal sistema (StackOverflowException, OutOfMemoryException,). La Parola Chiave WHEN La parola chiave When (non gestita in C#) permette di specificare un ulteriore condizione da soddisfare al filtro impostato in un blocco Catch. In questo esempio, utilizzeremo più blocchi Catch con filtro identico ma con condizione When diversa: Catch provaex As DivideByZeroException When Valore1 < 10 MessageBox.Show("Divisione per 0 per valore1 < 10!", "Eccezione:") Catch provaex As DivideByZeroException When Valore1 >= 10 MessageBox.Show("Divisione per 0 per valore1 >= 10!", "Eccezione:") End Con la gestione dell esempio, verrà eseguito il secondo blocco Catch dato che. E comunque da tenere in considerazione che si può arrivare allo stesso risultato usando il costrutto If..Then..Else perdendo comunque leggibilità e organizzazione. La parola chiave Finally Quando viene sollevato un errore, spesso si ha la necessità di utilizzare un codice di cleanup ad esempio chiudere un file o una connessione ad un database. La parola chiave Finally è utilizzata in questi casi. Tutto il codice inserito tra Finally ed End verrà eseguito indipendentemente dal fatto che sia stata sollevata un eccezione o meno. Catch provaex As DivideByZeroException When Valore1 < 10 MessageBox.Show("Divisione per 0 per valore1 < 10!", "Eccezione:")

Catch provaex As DivideByZeroException When Valore1 >= 10 MessageBox.Show("Divisione per 0 per valore1 >= 10!", "Eccezione:") Finally MessageBox.Show("Il valore1=" & Str(Valore1) & " ed il Valore2=" & Str(Valore2)) End Con questo codice apparirà una MessageBox che visualizza i valori delle variabili Valore1 e Valore2 indipendentemente dal fatto che venga sollevata un eccezione. Il codice dopo Finally verrà eseguito perfino se si utilizza un Exit. Nel menu Debug di Visual Studio.Net, ciccando su Eccezioni, verrà visualizzata la finestra di dialogo Eccezioni. Questa finestra di dialogo, mostra tutti i tipi di eccezioni gestite dal runtime del.net raggruppate per Namespace per cui può essere utile per avere una visione più ampia delle vari tipi. Selezionando un nodo oppure una singola eccezione, si può decidere, (nel caso in cui l applicazione intercetti l eccezione selezionata) se continuare e ignorare l errore oppure passare il controllo al debugger. E possibile infine sollevare un eccezione utilizzando Throw (che corrisponde a Err.Raise in VB6). Ad esempio, potrei decidere di sollevare un eccezione se la variabile Valore2 è minore o uguale a zero: If Valore2 <= 0 Then Throw New DivideByZeroException("Valore2 deve essere > di 0") End If

MessageBox.Show(provaEx.Message) End Quando il valore della variabile, il codice solleva un eccezione DivideByZeroException e tra parentesi personalizza il messaggio che verrà restituito. E possibile utilizzare Throw anche all interno di un blocco Catch per notificare al chiamante l eccezione: Throw End Nell esempio, se una procedura chiama la funzione Divisione, alla procedura chiamante, verrà restituita l eccezione solo perchè gli viene notificata tramite Throw. Concludo consigliando vivamente di utilizzare questa novità di VB.Net a scapito di On Error... perchè l esecuzione sarà più veloce e consente l interoperabilità con altri linguaggi (C#) che non supportano la vecchia gestione VB6. N.B. Per dubbi e chiarimenti scrivere a federicobarbati@tiscali.it