Para el tratamiento
de errores se usa Exception, este permite manejar
los errores macro, los más comunes son:
Tipo
|
Error
|
Numérico
|
- Matemático
|
BDD
|
- SQL
|
Archivo
|
- I/O
|
En caso de que no se especifique el tipo de error
trata cualquier tipo de error, en caso de que si se especifique uno y se genere
otro tipo de error se cae la aplicación.
try
{
//...
}
catch
(Exception)
{
//...
}
finally
{
//...
}
Ambos, (try y catch) siempre van juntos,
mientras que finally siempre se
ejecutará sea que haya o no error.
Un try puede tener varios tipos de catch. x Ej.
try
{
//...
}
catch
(IOException)
{
//...
}
catch
(SQLException)
{
//...
}
catch
(Exception)
{
//...
}
Los errores van desde el específico a lo general. Por
ejemplo el IOException es hijo del Exception por lo que si primero le pongo al
Exception no entrará al IOException. No serviría de nada.
Para capturar el error se lo trata de la siguiente
manera:
Luego del catch se agrega una variable como sigue:
catch
(Exception e)
{
MessageBox.Show(e);
}
Cuando se dan los
errres en las diferentes capas el error tratado se lo debe propagar, es decir
enviar a la capa que lo llamó.
En caso de que el error
se de en la capa de negocios, el error se puede tratar de la siguiente manera:
try
{ //////
lstArchivos.Items.Clear();
foreach
(FileInfo fi in
dir.GetFiles())
lstArchivos.Items.Add(fi.Name);
}
catch (Exception ex)
{
MessageBox.Show("No hay archivos en la carpeta seleccionada.");
throw ex;
}
No es bueno arrojar
muchos Throws entre capas al usuario:
En un inicio las al pasar
el error entre capas se perdía el detalle de los errores en VS2003 y VS2005.
Cuando se hace una
llamada se envían a la pila de llamadas, por lo que se sobrecarga la memoria.
Si da error en la capa de
datos es porque se llamó desde el negocio, y esta fue llamado en UI, Por efecto
dominó se cae el método en datos luego en el negocio y luego en la UI, por lo
tanto se recomienda agregar un try catch en la de datos (se tienen los errores
reales de la BD).
Analizar en qué capas colocar
los try catch y throw, según el número de capas.
Deber: Implementar try
catch en cada método aplicado hasta ahora.