Computacion

Páginas: 9 (2163 palabras) Publicado: 19 de noviembre de 2012
Uso de RAISERROR desde SQL y gestión de errores desde ADO.NET
Existen multitud de formas de manipular los errores o excepciones desde llamadas en código administrado a procedimientos almacenados (SP en adelante) a través de ADO.NET. Quizás la peculiaridad reside en la responsabilidad que le otorguemos a los SPs.
Desde la versión SQL Server 2005, y con el uso de TRY…CATCH podemos capturar ytratar un error de la siguiente forma.
BEGIN TRY
...
END TRY
BEGIN CATCH
...
END CATCH
Sin embargo la no debemos olvidar el cómo devolvemos/notificamos un error desde el TRY…CATCH a la llamada realizada desde código administrado.
Devolver el error como resultado
Una opción sería la de retornar la descripción de las propiedades del error producido como resultado como sigue:
BEGIN TRY
...END TRY
BEGIN CATCH
...
SELECT ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH
Esta forma devolverá una fila de 6 columnas. El principal problema reside en que para la clase que realiza la llamada al SP le constará como quese ha ejecutado correctamente. Además si la llamada se realiza mediante un DbCommand mediante ExecuteScalar únicamente se obtendrá el número de error (primera columna). Por otro lado si el objetivo del SP es el de insertar, eliminar o modificar un conjunto de datos lo único que deberíamos esperar del SP es que nos dijera, en el caso que ha ido correcto, el número de filas afectadas, si se da elcaso. En mi opinión, esta es una mala opción y se debería obviar. Además su detección desde la aplicación cliente es confusa.
Devolver el error como mensaje y generar excepción
La opción más correcta elegante es mediante el uso de RAISERROR dentro del CATCH. Sin embargo, para comprender el funcionamiento de esta función deberíamos, en primer lugar, conocer la anatomía de un error en SQL Server.Anatomía de un error
La información que obtenemos a través del SQL Server Management Studio, en forma de texto es la interpretación que éste hace de la información enviada por SQL Server a través de varios componentes que establecen sus propiedades.
Message number – Cada error tiene un número identificativo. Los mensajes producidos por el usuario a través de RAISERROR tienen un valor por defectode 50000. A partir de 50001 en adelante se pueden configurar mensajes de error específicos en sys.messages.
USE master
GO
EXEC sp_addmessage @msgnum = 600001,
@severity = 15,
@msgtext = 'Indicated time %s is not allowed.
Transports services are only available from
09:00AM until 05:00PM.'
, @lang = 'us_english'
, @with_log = 'FALSE'
GO
EXEC sp_addmessage @msgnum = 600001,@severity = 15,
@msgtext = 'La hora %s indicada no es válida.
Los servicios únicamente estan disponibles
desde las 9h hasta las 17h.'
, @lang = 'Spanish'
, @with_log = 'FALSE'
GO
Severity level – Importante pues determinará el comportamiento del sistema en base a la severidad del error.
TABLA 1: RAISERROR Severity Categories |
Severity Range | Error Number Info | @@ERROR| Logged As |
1 hasta 9 | In black | NOT SET | Informational |
10 | Not provided | NOT SET | Informational |
11 hasta 14 | In red | SET | Informational |
15 | In red | SET | Warning |
16 | In red | SET | Error |
State – Los valores son de 1 a 127. Se sabe que cada mensaje tiene un estado determinado pero Microsoft no lo ha documentado. Un estado 127 significa que el cliente se hadesconectado sin embargo esa información es trivial puesto que una severidad superior a 18 implica el mismo comportamiento nosotros.
Procedure – En qué objeto (contenedor del T-SQL) se ha producido.
Line – La línea en que se ha producido.
Message text – La descripción del error o mensaje.
Volvamos a la captura del error pero ahora utilizando RAISERROR:
BEGIN TRY
SELECT 1/0
END TRY
BEGIN...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Computacion
  • Computacion
  • Computacion
  • Computacion
  • Computacion
  • Computacion
  • Computacion
  • Computacion

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS