Tratamiento de Errores haciendo uso de excepciones en Visual Basic .NET (Valido para las versiones 2003 y 2005 de VS.NET)

  En este articulo mostrare como evitar y manejar errores desde VB.NET utilizando los Bloques Try,Catch, Finally y la condicionante If..Then..Else. Anteriormente cuando desarrollábamos una aplicación en VB6 tratábamos los errores o mejor dicho evitábamos un desborde de nuestra aplicación utilizando “On Error Resume Next” y esto nos ayudaba a que no se desbordara la aplicación.  
 
     
  Eso lo hacíamos más o menos así. (Ejemplo en VB6)

Private Sub cmdOk_Click( ) 

 On Error Resume Next
 If TextBox1.Text = 2 Then
  cmd.Write(TextBox1.Text)
 End If

End Sub 

Ciertamente aquí nos tiene que dar un error seguro, ya que “cmd.Write” no es parte de la sintaxis de VB6, en caso de que no hubiésemos tenido “On Error Resume Next” pues la aplicación sufriría un desbordamiento.

Aunque en .NET todavía podemos usar esta forma, lo que se nos aconseja es que utilicemos “Try Catch”. Vamos a ver un ejemplo de una ConsoleApplication.


Sub Main()

Dim i As Integer
Dim j As Integer

Try
 ’Dentro de este bloque ponemos el codigo que 
 ’necesitamos evaluar
 i = 10
 j = 0
 Dim res As Integer
 res = i / j
 System.Console.WriteLine(“El Resultado es:” & res)
Catch ex As Exception
 ’Aqui nos indicara el origen del error
 System.Console.WriteLine(ex.Message)
Finally
 System.Console.ReadLine()
End Try

End Sub

Como podemos ver en el codigo (el cual esta comentado), se generara un error ya que estamos intentando dividir una cantidad por cero (0) y esto matematicamente es imposible. Luego el Bloque “Catch” entra en funcion con el mensaje de excepcion y nos presenta el suguiente mensaje en pantalla, imagen 1.

En caso de que sacaramos el codigo del “Try Catch” pasaria lo siguiente, imagen 2.

Nos aparece este mensaje de error el cual no nos dejara compilar nuestra aplicación.

Pero esto es con valores los cuales podemos controlar facilmente porque lo ponemos nosotros mismos, pero que pasaria con una cantidad que introduzca el usuario del sistema, para ver este caso crearemos una WindowsApplication.

El Formulario se vera asi.

El mensaje de error como el del resultado de la operación (division) seran presentandos en un MessageBox.

Este seria el codigo de la aplicación.

Private Sub btnDividir_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDividir.Click

‘Declaramos y asignamos los valores de entrada
‘los cuales los definira el usuario
Dim i As Integer = Val(Me.txtPR.Text)
Dim j As Integer = Val(Me.txtSR.Text)

Try
 ’Declaramos la variable del resultado
 Dim res As Integer
 ’Realizamos la operacion
 res = i / j
 ’Mostramos el resultado de la operacion en pantalla
 MessageBox.Show(“El Resultado es:” & res)
Catch ex As Exception
 MessageBox.Show(ex.Message)
End Try

End Sub

La diferencia a simple vista no es mucha pero si nos fijamos esta vez el usuario definira la cantidad, pero con esto no es que todo esta hecho hay otras cosas que tenemos que tomar en cuenta, por ejemplo, si el usuario en vez de numeros introduce letras, la operación no se daria, esto lo podemos hacer utilizano “Not IsNumeric(objeto)” dentro de una condicion “If…Then…Else” la cual puede ir dentro del Bloque “Try Catch

Veamos el Codigo.

Private Sub btnDividir_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDividir.Click

‘Declaramos y asignamos los valores de entrada
‘los cuales los definira el usuario
Dim i As Integer = Val(Me.txtPR.Text)
Dim j As Integer = Val(Me.txtSR.Text)

Try

 ’En caso de no sea numerico el dato introducido
 If Not IsNumeric(Me.txtPR.Text) Then
  MessageBox.Show(“El Primer Rango debe ser numerico”, “Dato numerico”)
  ’Limpia la entrada
  Me.txtPR.Clear()
  ’Enfoca para una nueva entrada
  Me.txtPR.Focus()
  ’Con esto los que hago es dividir la ejecucion de cada subrutina
  ’para evitar una sobrecarga en la condicion
  Exit Sub
 ElseIf Not IsNumeric(Me.txtSR.Text) Then
  MessageBox.Show(“El Segundo Rango debe ser numerico”, “Datos numerico”)
  Me.txtSR.Clear()
  Me.txtSR.Focus()
  Exit Sub
 Else
  ’Declaramos la variable del resultado
  Dim res As Integer
  ’Realizamos la operacion
  res = i / j
  ’Mostramos el resultado de la operacion en pantalla
  MessageBox.Show(“El Resultado es:” & res)
 End If

Catch ex As Exception
 MessageBox.Show(ex.Message)
End Try
End Sub

La aplicación en caso de que utilizemos letras en lugar de numeros para realizar la operación matematica nos mostrara el siguiente error.

En caso de que el usuario haya introducido bien los datos, mostrara el resultado de la siguiente manera.

En conclusion, la diferencia que podemos constatar al realizar una WindowsApplication como una ConsoleApplication es que.

La ConsoleApplication: en esta el error es provocado por nosotros mismos y asi es demasiado facil predecir el error y evitarlo, aun sin tener que utilizar excepciones.

La WindowsApplication: aquí es diferente ya que los datos son introducidos por el usuario y de no utilizar las excepciones el programa nos daria un error de desbordamiento “muy feo” sacando al usuario del mismo. 

Pues bien, esto es solo una parte de lo que es el tratamiento de errores en .NET, espero que este articulo les haya sido de utilidad, que esa es la intencion

 
Imagen 1


Imagen 2

 
     
 

 Fuente: http://www.netveloper.com/contenido2.aspx?IDC=304_0

Leave a Reply