Os explicamos cómo funciona el manejo de errores o excepciones en Visual Basci .Net, lenguaje de programación visual de Microsoft perteneciente a Visual Studio .Net. Os explicamos con ejemplos cómo capturar los posibles errores que se puedan producir en la ejecución normal del código para mostrar mensajes al usuario (o para que el usuario no se entere del error).
- Manejo de errores en versiones anteriores de Visual Basic.
- El objeto Exception en Visual Basic .NET.
- La instrucción Try…Catch…End Try ó Finally en Visual Basic .NET.
Manejo de errores en versiones anteriores de Visual Basic
En versiones anteriores de Visual Basic, como la versión 6, el control de errores se realizaba mediante:
|
1 2 3 4 5 6 7 8 9 10 |
On Error GoTo cError .... :cSalir exit sub :cError msgbox "Número de error: " + err.number + vbcrlf + _ " Descripción del error: " + err.description |
o bien utilizando «On Error Resume Next».
Visual Basic .Net sigue permitiendo el uso de estas dos instrucciones para el control de errores, pero Microsoft recomienda encarecidamente que no se utilicen y se empleen las nuevas instrucciones Try…Catch…Finally.
El objeto Exception en Visual Basic .NET
El objeto Exception se encuentra definido en .NET Framework y su nombre completo es System.Exception. En este marco de trabajo se definen otras dos clases genéricas: System.SystemException y System.ApplicationException. Casi todos los objetos de Exception definidos en .NET Framework heredan de SystemException, mientras que los objetos de excepción personalizados y específicos de cada aplicación heredan de ApplicationException. Estas dos clases no agregan ninguna propiedad o método a la clase base Exception.
A continuación enumeramos algunas de las clases Exception en los espacios de nombres más importantes de .NET Framework:
| Espacios de nombre | Clases de excepción |
| System | ArgumentNullException, ArgumentOutOfRangeException, DivideByZeroException, IndexOutOfRangeException, NullReference-Exception, OverflowException, StackOverflowException |
| System.IO | DirectoryNotFoundException, EndOfStreamException, FileNotFoundException, PathTooLongException, FileLoadException, DriveNotFoundException |
| System.Data | DuplicateNameException, InvalidConstraintException, InvalidExpressionException, MissingPrimaryKeyException, NoNullAllowedException, ReadOnlyException |
| System.Runtime.InteropServices | InvalidComObjectException, InvalidOleVariantTypeException, SEHException |
La instrucción Try…Catch…End Try ó Finally en Visual Basic .NET
La palabra clave Catch
Siempre que se añada código fuente que pueda iniciar una excepción será conveniente introducirlo en un bloque Try…Catch…End. El código que quede entre Try y Catch estará protegido contra excepciones y si se iniciara una excepción, Visual Basic pasaría el control al primer bloque Catch (filtro de excepciones). En el bloque de código Catch se podrán examinar las propiedades del objeto Exception y decidir cómo reaccionar al error.
Un ejemplo sencillo de control de excepciones:
Private Sub btExcepcion_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btExcepcion.Click
Dim x, y As Integer
Try
y = CInt(InputBox("Introduzca Y", "Control de excepciones", 0))
x = x y
'Si "y" = 0, la siguiente instrucción no se ejecutará
y = CInt(10 ^ x)
MsgBox("El valor de Y es: " + CStr(y))
Catch ex As Exception
If ex.Message = "Intento de dividir por cero." Then
MsgBox("Error al intentar dividir por cero.", _
MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
Else
MsgBox("Se ha producido el siguiente error: " + ex.Message, _
MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
End If
End Try
End Sub
