Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
NET
Servicio de Informática
TEMA 7: ERRORES
1. CONCEPTOS PREVIOS
Durante este tema se van a tratar de 2 tipos de errores: los de ejecución y los lógicos.
Ignoramos los errores de compilación.
De ejecución: Son las excepciones que aparecen en tiempo de ejecución como por
ejemplo la incapacidad de abrir la base de datos.
De compilación: Son errores que Visual Studio nos señala al compilar la página.
Suelen ser faltas semánticas o sintácticas en el código.
ERRORES LÓGICOS
Así, si por ejemplo, si se intenta cargar un usuario vacio Debug recogerá el mensaje
“no se ha encontrado al usuario”. Esto se envía como un aviso (un warning) y será
responsabilidad de la página apsx que haga uso de este método el que gestione el
aviso. La clase no lanzará excepción.
Ejemplo:
Supongamos estas 2 clases:
using System;
public class ClaseAnimal
{
private string _debug;
public int Identificador { get; set; }
public string Nombre { get; set; }
public string Debug { get { return _debug; } }
Tema 4 / Página 1
Gestión de una aplicación completa con .NET
Servicio de Informática
using System.Collections.Generic;
public static class ClaseAnimales
{
public static List<ClaseAnimal> Todo()
{
ClaseAnimal Animal = new ClaseAnimal();
List<ClaseAnimal> Animales = new List<ClaseAnimal> {
new ClaseAnimal {Identificador=1, Nombre="Elefante"},
new ClaseAnimal {Identificador=2, Nombre="Tigre"}
};
return (Animales);
}
}
Dará como resultado una página html que buscará un animal por su código. En caso
de no encontrarlo pondrá el mensaje que arrastra del cs de animal.
ERRORES DE EJECUCIÓN
Otra posibilidad es que tengamos previsión que en la clase se dé un error. Por ejemplo
que no se encuentre un fichero a leer o que la base de datos esté caída. Si esto no
Tema 4 / Página 2
Gestión de una aplicación completa con .NET
Servicio de Informática
funciona la aplicación no podrá continuar. En este caso el Debug recogerá algo como
“No se ha encontrado el fichero buscado en… “ y después lanzará una excepción con
un texto tal como “fichero no encontrado”. Esta excepción tendrá que ser tratada en la
página aspx.
Cuando queramos controlar una parte del código que puede producir un error lo
incluimos dentro del bloque try, si se produce un error, éste lo podemos detectar en el
bloque catch, por último, independientemente de que se produzca o no una excepción,
podemos ejecutar el código que incluyamos en el bloque finally.
Bloque try
En este bloque incluiremos el código en el que queremos comprobar los errores. En el
momento que se produzca el error se usará (si hay) el código del bloque catch.
Bloque catch
Si se produce una excepción, ésta la capturamos en un bloque catch.
En el bloque catch podemos indicar que tipo de excepción queremos capturar, para
ello usaremos una variable de tipo Exception, la cual puede ser del tipo de error
específico que queremos controlar o de un tipo genérico.
try
{
// código para trabajar con ficheros, etc.
}
catch(System.IO.IOException ex)
{
// el código a ejecutar cuando se produzca ese error
}
Si nuestra intención es capturar todos los errores que se produzcan podemos usar la
clase Exception como tipo de excepción a capturar. Es la más genérica de todas las
clases para manejo de excepciones, por tanto capturará todas las excepciones que se
produzcan.
try
{
// código que queremos controlar
}
catch(System.Exception ex)
{
// el código a ejecutar cuando se produzca cualquier error
}
La variable indicada en el bloque catch (ex) la podemos usar para mostrar un mensaje
al usuario o para obtener información extra sobre el error.
Tema 4 / Página 3
Gestión de una aplicación completa con .NET
Servicio de Informática
Pero si no vamos usar la variable indicada en el bloque Catch, pero queremos que no
se detenga la aplicación cuando se produzca un error, podemos hacerlo de esta
forma:
try
{
// código que queremos controlar
}
catch
{
// el código a ejecutar cuando se produzca cualquier error
}
try
{
// código que queremos controlar
}
catch(FormatException)
{
// captura de error de formato
}
catch(Exception ex)
{
// captura del resto de errores
}
Bloque finally
En este bloque podemos indicar las instrucciones que queremos que se ejecuten, se
produzca o no una excepción. De esta forma nos aseguramos de que siempre se
ejecutará un código, por ejemplo para liberar recursos, se haya producido un error o
no.
Nota:
Tema 4 / Página 4
Gestión de una aplicación completa con .NET
Servicio de Informática
Hay que tener en cuenta de que incluso si usamos return dentro de un bloque de
control de errores, se ejecutará el código indicado en el bloque finally.
Ejemplo:
using System;
public class Util
{
private string _debug;
public string Debug { get {return _debug;}}
public string Lee()
{
const string fic = @"E:\tmp\Prueba.txt";
string texto;
try
{
System.IO.StreamReader sr =
new System.IO.StreamReader(fic);
texto = sr.ReadToEnd();
sr.Close();
}
catch (Exception e)
{
_debug +=
"Fichero " + fic + " no encontrado " + e.Message;
throw new Exception("Fichero no encontrado");
}
finally
{
//Para cuando necesite cerrar algo
}
return texto;
}
}
Pero evitaremos que de un error de color amarillo en la pantalla del usuario. Por ello
trataremos al error según se explica en el punto siguiente.
Tema 4 / Página 5
Gestión de una aplicación completa con .NET
Servicio de Informática
Y en la sección de application_error:
3.- Como estamos en un entorno local deberemos crear una carpeta ToolsNet dentro
de nuestro sitio web. Dentro pondremos un fichero “ruta.xml”. Ese fichero contendrá:
<?xml version="1.0" encoding="UTF-8"?>
<ERRORES actualizado="8/24/2009">
<PATH path="~" descripcion="Ejemplo" id="9">
<EMAIL idhijo="5">direccion.correo@ua.es</EMAIL>
</PATH>
</ERRORES>
ERRORES DE EJECUCIÓN
Ahora si se produce un error de ejecución como throw new Exception ("ERROR
" + miUtil.Debug); se pintará en pantalla un mensaje como:
Tema 4 / Página 6
Gestión de una aplicación completa con .NET
Servicio de Informática
ERRORES LÓGICOS
Podemos generar errores cuando algo inesperado ocurra, pero que no hace falta que
se corte el flujo del programa.
Por ejemplo, si el usuario que se está buscando no se encuentra se puede indicar con
un mensaje. Y nos puede interesar que ese error se envíe por correo.
using System;
using ua;
Tema 4 / Página 7
Gestión de una aplicación completa con .NET
Servicio de Informática
4. ENLACES INTERNET
Sobre manejo de excepciones:
http://www.zonacodigos.com/index.php/c/20-manejo-de-excepciones-
5. EJERCICIO
Incorporar la gestión de errores en la aplicación.
Tema 4 / Página 8