Ayuda! Pasar errores a la aplicación

Hola! Tengo un problema con la gestión de errores.
¡ Ayuda por favor!
Tengo una aplicación web ASP VBScript que interactúa con una base de datos SQL Server. Estoy intentando manejar los posibles errores cuando se hacen operaciones en la base de datos, como insertar, modificar, borrar, etc, .. Estas operaciones las llevo a cabo mediante procedimientos almacenados en SQL Server.
Lo que quiero hacer es capturar el posible error en el procedimiento almacenado, para después pasarlo a la aplicación web y decidir qué hacer. Esto lo hago de la siguiente forma en el sp:
Declare @Error_num int
Declare @Severity smallint
INSERT INTO Inscripciones_en_ofertas (Oferta_num, Demandante_num, Data, Motivos_interes)
VALUES (@Oferta_num, @Demandante_num, @Data, @Motivos_interes)
SELECT @Error_num = @@ERROR
IF (@Error_num<>0)
SELECT @severity = severity FROM sysmessages
WHERE @Error_num = error
SELECT @severity AS error_severity
END
** Selecciono @severity porque es lo que determina si la operación se ha llevado a cabo correctamente o no, en caso que me devuelva un numero entre 11 y 16 saldrá un mensaje en el web que diga que el usuario ha introducido mal los datos, si devuelve entre 17 y 19 que salga un mensaje que diga que por causas ajenas al usuario la operación ha fallado. ¿Todo esto correcto? Me han dicho que haga servir el número de error que da @@ERROR, pero para empezar estos números no son únicos, hay de duplicados y además este número por si sólo no determina si la acción se llevó a cabo o no, esto lo determina el nivel de severidad ?severity? ¿no es así?
** ¿Está bien escrito el procedimiento almacenado? Cuando lo ejecuto desde la aplicación NO ME APARECE LA VARIABLE @severity, pero sí aparece cuando lo ejecuto en el Analizador de Consultas.
** A mí me interesaría que todos los errores que fuera produciendo SQL se registraran en algún sitio para yo después revisarlos e ir corrigiendo. ¿Es posible esto?
Gracias,
Cesar

2 respuestas

Respuesta
1
En estos casos lo mejor es ejecutar el sp y analizar el valor retornado para saber si hubo un error o no, por ejemplo, 0 no hubo error, 1 error de inserción, 2 de modificación, etc
Un ejemplo podría ser: (ojo que haré un ejemplo nada más)
Begin transaction
insert into table (campo) values (valor)
if @@error<>0
rollback transaction
else
commit transaction
if @@error<>0
return 0
else
return 1
Comentarios:
Begin transaction inicia una transaccion, es como reservar un espacio por si ocurren errores para retroceder
rollback transaction es para deshacer
commit transaction es para confirmar
Lo separe el error en 2 if para hacer notar la diferencia de como manejar el error
De acuerdo, gracias por tu respuesta. Aunque ya he abandonado un poco éste tema hasta más adelante, quizás me apuntaré a un curso de SQL Server. He aprendido bastante de errores durante una semana entre foros y manuales pero me quedan dudas esenciales.
Gracias de nuevo,
Cesar
Respuesta
-1
Puedo hacer un ejemplo para la solución de tu problema, pero antes necesito validar lo siguiente:
- ¿Has trabajado con RAISERROR?
- Transacciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas