Intercettare errori

sabato 08 ottobre 2005 - 14.06

ilpako Profilo | Junior Member

come faccio a gestire gli errori relativi alla compilazione di un form che inserisce o aggiorna dati in un database?Ovvero gli errori che mi restituisce il database durante l'inserimennto dei dati...

Cteniza Profilo | Guru

Ci sono diversi eventi che accadono durante gli aggiornamenti.
Si possono gestire tutti o quasi in un blocco di try / catch
Esempio per sql server
La serie di catch va impostata secondo la natura dell'eccezione, come un crivello al contrario che prima filtra le cose più fini e poi lascia "il grosso" all'ultimo livello
Naturalmente l'ultimo livello è intercettare Exception che prende gli errori non intercettati prima.
Catch ex As SqlException
Dim msg As String = ""
Dim k As Integer = 0
For k = 0 To ex.Errors.Count - 1
msg += "Errore: " + ex.Errors(k).Number.ToString + " " + ex.Errors(k).Message + Environment.NewLine
Next
MessageBox.Show(msg, "Errori SQL", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch eConstraint As ConstraintException
MessageBox.Show("Rilevati gli errori: " + Environment.NewLine + eConstraint.Message, "Errore nei dati", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch eConcurrency As DBConcurrencyException
MessageBox.Show("Rilevati gli errori: " + Environment.NewLine + eConcurrency.Message, "Errore di concorrenza", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch eNull As NoNullAllowedException
MessageBox.Show("Rilevati gli errori: " + Environment.NewLine + eNull.Message, "Dati obbligatori mancanti", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch ex As DataException
MessageBox.Show("Errore: " + ex.Message, "Errore nei Dati", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch ex As Exception
MessageBox.Show("Errore: " + ex.Message, "Errore di sistema", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
If cn.State = ConnectionState.Open Then
cn.Close
End If
End Try

ilpako Profilo | Junior Member

in cosa si differenzia il blocco che hai postato nel caso di un db access connessio via oledb?

Cteniza Profilo | Guru

Fai almeno la fatica di andare nelle classi di oledb e guardare che errori escono.
Evidentemente quelli che appartengono alle gerarchie:
System
System.Data
System.Data.OleDb
Se vai a guardare gli oggetti che usi (Connection, command, adapter) su ciascuno ci sono gli errori

ilpako Profilo | Junior Member

grazie mille sei stato molto esaudiente :)

ilpako Profilo | Junior Member

dimenticavo...la mia è una web application non posso usare messagebox.show...c'è qcs di simile per le pagine aspx?


Cteniza Profilo | Guru

Evidentemente messagebox.show è lì solo con lo scopo di farti vedere gli errori intercettati.
Il testo del messaggio e l'errore rimangono comunque validi.


ilpako Profilo | Junior Member

non mi hai risposto...esiste un alternativa a messagebox per le pagine aspx?chessò tipo messaggi pop-up o robe del genere?se l'utente connettendosi alla mia webapp commette errori sul db come mando a video i msg di errore?

Brainkiller Profilo | Guru

Hai diversi modi, c'è il ValidationSummary da usare con i Validators oppure per simulare la MessageBox puoi utilizzare il comando javascript alert('') che ti visualizza una message box. Per far sì che appaia dopo un inserimento di dati o dopo un errore, puoi usare Page.RegisterStartupScript per renderizzare lo script nella pagina.

In questo modo se c'è un errore, RegisterStartupScript inserisce il codice javascript con l'alert nella pagina e appena si carica vedrai la message box.

Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

ilpako Profilo | Junior Member

grande guru e grande cteniza per l'aiuto...grazie

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