Error de control en Visual Basic .NET o Visual Basic 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 311326 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describe las opciones para administrar excepciones en Microsoft Visual Basic .NET o Microsoft Visual Basic 2005.

Más información

Visual Basic .NET o Visual Basic 2005 admite dos formas diferentes para impedir que termine una aplicación un error inesperado: control de errores estructurado y tratamiento de errores no estructurado. Estos eventos son errores de tiempo de ejecución, también denominados excepciones--que son respuestas a las condiciones anormales o excepcionales ocasionados por la ejecución de un bloque de código.

Control no estructurado de errores es el nombre que se utiliza en Visual Basic .NET o Visual Basic 2005 para hacer referencia al error de método que se utiliza en Microsoft Visual Basic 6.0 de control. Control estructurado de errores se introduce por primera vez, los programadores de Visual Basic .NET y se realiza mediante la instrucción Try... Catch... Finally que largo ha sido una característica de otros lenguajes de programación. Tratamiento de errores estructurado presenta una forma más sencilla de crear y mantener programas con controladores de errores consistentes y exhaustivos.

Aunque Visual Basic .NET o Visual Basic 2005 admite ambos métodos, los métodos no pueden implementarse simultáneamente en el mismo procedimiento. La única excepción es la instrucción error , que puede utilizarse en el control estructurado de errores. Se recomienda que el control en Visual Basic .NET o Visual Basic 2005 de todos los errores realizarse con control estructurado de errores. Tratamiento de errores no estructurado puede degradar el rendimiento de la aplicación y el resultado en código que es difícil de depurar y mantener.

En el caso de un error en tiempo de ejecución, ambos métodos de control de error al buscan un controlador de errores local que está definido en un determinado bloque de código. Si ningún controlador de errores local está presente, la excepción se propagará la pila de llamadas hasta que se encuentra un controlador coincidente. La pila de llamadas representa todos los procedimientos que se han llamado a antes hasta el punto actual de ejecución y aún no han terminado. Si no se encuentra ningún controlador en los procedimientos de la pila de llamadas cuando se produce un error, se termina la aplicación.

Control de errores no estructurado

Tratamiento de errores no estructurado se implementa con la instrucción On Error , que se coloca al principio de un bloque de código para controlar todas las excepciones posibles que se producen durante la ejecución del código. Todos los controladores de error de Visual Basic 6.0 en .NET son objetos que pueden obtener acceso mediante el espacio de nombres Microsoft.VisualBasic.Information.Err . El controlador se establezca en Nothing cada vez que se llama al procedimiento. Debe colocar sólo una instrucción On Error en cada procedimiento, porque las instrucciones adicionales deshabilitar a todos los controladores anteriores que se definen en ese procedimiento.

Instrucción On Error

La instrucción On Error se utiliza para habilitar una rutina de tratamiento de errores, deshabilitar una rutina de tratamiento de errores o especifique dónde desea bifurcar el código en el caso de error.
   On Error { GoTo [ line | 0 | -1 ] | Resume Next }
				
GoTo line

Se utiliza para habilitar la rutina de tratamiento de errores, empezando en la ubicación especificada por el argumento de línea . El argumento de línea puede ser una etiqueta de línea o un número de línea que se encuentra dentro del procedimiento de cierre. Un error en tiempo de ejecución, activa el controlador de errores y bifurca el control a la línea especificada. Si la línea especificada no está ubicada en el mismo procedimiento que la instrucción On Error , se produce un error de compilación.

Para evitar un comportamiento inesperado, coloque una instrucción Exit Sub , una instrucción Exit Function o una instrucción Exit Property sólo antes de la etiqueta de línea o el número de línea. Esto impide que el código de control de errores se ejecute cuando no ha producido ningún error.

GoTo 0

Deshabilita al controlador de errores habilitado que está definido dentro del procedimiento actual y restablece a Nothing .

GoTo -1

Deshabilita la excepción habilitada que está definida dentro del procedimiento actual y restablece a Nothing .

Reanudar siguiente

Mueve el control de ejecución a la instrucción que sigue inmediatamente después de la instrucción que causó el error de tiempo de ejecución que se produzca y continúa la ejecución desde este punto hacia adelante. Esta es la forma preferida utilizar para tener acceso a los objetos en lugar de utilizar la instrucción On Error GoTo .

ejemplo

En el siguiente ejemplo de código, el controlador de errores está habilitado en la primera línea de la rutina con la instrucción Sin On Error GoTo estructura . La ubicación del error rutina de control se identifica con la etiqueta de línea Unstructured . La rutina de error implementa una simple instrucción Select Case que se ejecuta el bloque correspondiente de código, según el error producido.

La instrucción Resume Next al final del procedimiento de control error devuelve el control de la ejecución a la línea que sigue a la línea que causó el error que se produzca.

El controlador de errores, a continuación, se deshabilita con la instrucción On Error GoTo 0 , seguida por la instrucción On Error Resume Next , que se reactiva el controlador de errores. Si se produce un error de tiempo de ejecución, la instrucción provoca la ejecución para bifurcar a la línea que sigue inmediatamente a la línea que causó el error que se produzca la misma manera que la instrucción Resume Next en la rutina de tratamiento de errores. En este caso, esa línea es la instrucción If que da como resultado el número de error y muestra el usuario, así como borrar el objeto de error.
   Public Sub fnErrors()
   On Error GoTo Unstructured ' Enable error handler

     Dim Result As Integer
     Dim Value1 As Integer = 9
     Dim Value2 As Integer = 0
 
     On Error GoTo 0 ' Disables the error handler
 
     'Moves execution to the line following the line that caused the error.
     On Error Resume Next
 
     Result = Value1 / Value2 ' Division by zero, cause an overflow error.
 
     ' Catch the overflow error caused by dividing by zero.
     If Err.Number = 6 Then
       MessageBox.Show("Error Number: " & Err.Number.ToString)
       Err.Clear() ' Clear Errors
     End If
     Exit Sub

   Unstructured:  ' Location of error handler
     Select Case Err.Number
       Case 6
         ' Display the error number.
         MessageBox.Show("Divided by zero")
       Case Else
         ' Catch all other type of errors.
         MessageBox.Show(Err.Description)
     End Select
     'Resume execution to the line following the line that caused the error.
     Resume Next
   End Sub
				

Control estructurado de errores

Con el tratamiento de errores estructurado, Visual Basic tiene ahora una forma eficaz impiden que los errores inesperados se termine la ejecución de la aplicación. Error estructurado control también proporciona los programadores una manera más sencilla de crear aplicaciones sólidas que son más fáciles de mantener.

Tratamiento de errores estructurado se implementa en Visual Basic. NET o Visual Basic 2005 con un bloque Try... Catch... Finally de instrucciones. El bloque Try... Catch... Finally proporciona, por primera vez a Visual Basic, la capacidad de tratamiento de errores anidados.

Try... Catch... Finally instrucciones

En el código siguiente se muestra la estructura de una instrucción Try... Catch... Finally .
   Try 
     'Encapsulates a block of code that may produce a run-time error.
   Catch [Optional Filters]
     'The code runs if any of the statements in the Try block fails and filter is evaluated as true.
   [Additional Catch Blocks]
   Finally
     'Code executed after Try and Catch statement.
   End Try
				
el código que se espera para generar un error de tiempo de ejecución debe ubicarse en el bloque try para supervisar mediante el controlador de errores. Si este código produce un error durante la ejecución, Visual Basic examina todas las instrucciones catch implementadas en el bloque Try... Catch... Finally para buscar una condición que coincide con el error. Si Visual Basic encuentra una condición coincidente, el control de ejecución se transfiere a la primera línea de código dentro de la instrucción catch . Si Visual Basic no encuentra una condición coincidente, el error se propagará a la instrucción Try... Catch... Finally exterior. Esta instrucción puede encontrarse en el mismo procedimiento (instrucciones anidadas) o en un procedimiento anterior que llama que produjo un error. Este proceso se repite hasta que se encuentra una instrucción correspondiente. Si no se encuentra una instrucción coincidente, se produce un error y se termina la aplicación.

La instrucción finally se ejecuta por último, independientemente de si se han encontrado errores. En otras palabras, si no se encuentra ninguna instrucción catch coincidente, la instrucción finally se ejecuta antes a la propagación de instrucciones externas.

Esta jerarquía y la propagación se muestran con el siguiente código:
   Module StructuredError
     Sub Main()
       Try
         fnStructured()
       Catch ex As Exception ' Catches all exceptions.
         Debug.WriteLine("Exception Information: " & vbCrLf & ex.ToString)
         'Displays the representation of current exception.
       Finally
         Debug.WriteLine("Main: Finally executed !")
       End Try
     End Sub

     Public Sub fnStructured()
       'Nested Error Handling
       Try
         Try
           Dim X As Integer = 9
           Dim Y As Integer = 0
           Dim Result As Integer
           Result = X / Y
         Catch e As DataException ' Catches only DataException.
           'Displays the representation of current exception.
           Debug.WriteLine("Exception Information: " & vbCrLf & e.Message) 
         Finally
           Debug.WriteLine("fnStructured: Inner Finally executed !")
         End Try
       Catch e As InvalidCastException ' Catches only defined exception.
         'Displays the representation of current exception.
         Debug.WriteLine("Exception Information: " & vbCrLf & e.ToString)
       Finally
         Debug.WriteLine("fnStructured: Outer Finally executed !")
       End Try
     End Sub
   End Module
				
en el ejemplo anterior, se genera el error en un procedimiento fnStructured(). Esto es un error de desbordamiento de pila, causado por división con un cero (0). Este procedimiento implementa dos bloques Try... Catch... Finally de instrucciones, pero no uno tiene que coinciden con las instrucciones catch , y no se captura el error. Antes de que el control se propaga en la pila de llamadas, el código que está encapsulado en el bloque finally se ejecuta. El bloque Try... Catch... Finally que se implementa en Sub Main tiene una condición general que capture todas las excepciones que producen en su bloque try .

Las siguientes es el resultado del procedimiento anterior:
fnStructured: Inner Finally executed !
fnStructured: Outer Finally executed !
Exception Information:
System.OverflowException: Arithmetic operation resulted in an overflow. at
StructuredError.StructuredError.fnStructured() in C:\Documents and
Settings\heikkiri\My Documents\Visual Studio Projects\Temp\StructuredError\StructuredError.vb:line 21 at 
StructuredError.StructuredError.Main() in C:\Documents and 
Settings\heikkiri\My Documents\Visual Studio
Projects\Temp\StructuredError\StructuredError.vb:line 5
Main: Finally executed !
				

El objeto Err

El objeto Err , que se hereda de Microsoft Visual Basic 6.0, sólo puede utilizarse para detectar errores en un procedimiento que implementa el control con la instrucción On Error no estructurado de errores.

El objeto Err contiene información sobre un error de tiempo de ejecución que se produjo durante la ejecución de la aplicación. Medida que la ejecución escribe un procedimiento que contiene el control de errores, las propiedades del objeto Err se establecen a cero (0) o cadena de longitud cero (""). Si se produce un error durante la ejecución, las propiedades, a continuación, se establecen para proporcionar información único sobre el error, a través de sus propiedades. Se puede obtener una instancia del objeto Err a través de una función Microsoft.VisualBasic.Information.Err ; sin embargo, debido a que el objeto Err es un objeto intrínseco con ámbito global, no es necesario crear una instancia de este objeto en tiempo de ejecución.

En caso de un error de tiempo de ejecución, las propiedades del objeto Err pueden utilizarse para controlar el error (en función de su tipo), así como para mostrar información al usuario acerca del error que se ha producido. La siguiente tabla muestran las propiedades diferentes asociados con el objeto Err .

Contraer esta tablaAmpliar esta tabla
propiedad Descripción
Descripción Devuelve o establece una cadena que contiene una descripción del error que se ha producido.
Erl Devuelve un valor entero que indica el número de línea de la última instrucción ejecutada.
HelpContext Devuelve o establece un entero que contiene el identificador de contexto del tema, un archivo de Ayuda de.
HelpFile Devuelve o establece una expresión de cadena que contiene la ruta completa del archivo de Ayuda que está asociado el error.
LastDLLError Devuelve un código de error del sistema que se produce por una llamada a un archivo de biblioteca dynamic-link (DLL).
número Devuelve o establece un valor numérico que especifica el error.
origen Devuelve o establece una cadena que especifica el nombre del objeto o aplicación que originó el error.

El objeto Err tiene dos métodos asociados con él: elevar y Clear .

Contraer esta tablaAmpliar esta tabla
método Descripción
Borrar Se utiliza para borrar todas las propiedades del objeto Err .
provocar Utiliza para generar un error en tiempo ejecución, identificado con el número de error que se pasa como uno de sus parámetros.

Clase de excepción

   System.Object
      System.Exception
				
Como se indicó anteriormente en este artículo, el método preferido de tratamiento de errores en Visual Basic .NET o Visual Basic 2005 es control de errores estructurado, el cual se implementa con un bloque Try... Catch... Finally . Todas las excepciones que detectan en Visual Basic .NET o Visual Basic 2005 se derivan de esta clase, por ejemplo, OverFlowException . En caso de un error de tiempo de ejecución, Visual Basic .NET o Visual Basic 2005 produce un objeto Exception que puede ser generado por el sistema o personalizado generado. El método para detectar estas excepciones se describe en la sección "Control de errores estructurado" de este artículo.

Cuando se produce la excepción, el objeto Err global se establece a los valores correspondientes y se crea una nueva instancia de un objeto Exception . Esta instancia contiene más información acerca del error producido. Por ejemplo, la propiedad StackTrace contiene una lista de métodos que se llama y se llevó a la aparición del error.

La siguiente tabla muestran las propiedades públicas que están disponibles para las excepciones que se detectan en el control de errores estructurado.

Contraer esta tablaAmpliar esta tabla
propiedad Descripción
HelpLink Devuelve o establece el vínculo al archivo de Ayuda que está asociado a esta excepción.
InnerException Devuelve una instancia de la excepción que provocó la excepción actual que se produzca.
mensaje Devuelve un mensaje que describe la excepción.
origen Devuelve o establece el nombre de la aplicación o del objeto que provocó el error.
StackTrace Devuelve una cadena que presenta las tramas en la pila de llamadas en el momento cuando se produjo la excepción.
TargetSite Devuelve el método que produjo la excepción.


La tabla siguiente muestra los métodos públicos que implementan la clase Exception .

Contraer esta tablaAmpliar esta tabla
método Descripción
es igual a (heredado de Object )Método sobrecargado que se utiliza para determinar si dos instancias de objetos son iguales.
GetBaseException Cuando este método se reemplaza en una clase derivada, devuelve la excepción que es la causa raíz de uno o más excepciones posteriores.
GetHashCode Sirve como función hash para un determinado tipo; adecuado para su utilización en algoritmos hash y estructuras.
GetObjectData Cuando se reemplaza en una clase derivada, GetObjectData establece SerializationInfo con información sobre la excepción.
GetType (heredado de Object )Devuelve el tipo de la instancia actual.
ToString Reemplaza la función que crea y devuelve una presentación de cadena de la excepción.

El objeto Err se conserva en Visual Basic .NET o Visual Basic 2005 por motivos de compatibilidad y para facilitar la migración desde Visual Basic 6.0 a Visual Basic.NET o Visual Basic 2005 aplicaciones. Se recomienda que todos los control de errores en las aplicaciones de Visual Basic .NET o Visual Basic 2005 realizarse mediante control de excepciones de errores estructurado.

Referencias

Archivos de Ayuda:
  • Control estructurado de excepciones
  • No estructurado excepciones
  • Objeto Err
  • Clase de excepción

Propiedades

Id. de artículo: 311326 - Última revisión: miércoles, 6 de diciembre de 2006 - Versión: 2.3
La información de este artículo se refiere a:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palabras clave: 
kbmt kbvs2005swept kbvs2005applies kbinfo KB311326 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 311326

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com