Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Errores en SQL Server. ¿Como gestionarlos?

Estas en el tema de Errores en SQL Server. ¿Como gestionarlos? en el foro de Bases de Datos General en Foros del Web. Estoy creando un website dinámico con Dreamweaver MX, lenguaje ASP VBScript, SQL 2000 Server y PWS como servidor de prueba. El site no está todavía ...
  #1 (permalink)  
Antiguo 04/07/2003, 04:44
 
Fecha de Ingreso: marzo-2003
Mensajes: 38
Antigüedad: 21 años, 1 mes
Puntos: 0
Busqueda Errores en SQL Server. ¿Como gestionarlos?

Estoy creando un website dinámico con Dreamweaver MX, lenguaje ASP VBScript, SQL 2000 Server y PWS como servidor de prueba. El site no está todavía en la red.

De momento ya tengo creadas las opciones y páginas principales. Casi todas las acciones que lleva a cabo el site con la base de datos lo hace con procedimientos almacenados en SQL Server que yo mismo he ido creando con la ayuda de manuales y foros de discusión. Estos procedimientos me funcionan bien, así como las diferentes páginas del site, pero he oído hablar mucho de que hay que saber capturar los errores que me pueda devolver SQL Server y evitar que mi sitio se caiga. ¿Alguien podría explicarme de que va todo esto?.

No entiendo por qué tengo que saber capturar estos errores que, si llegaran a ocurrir, devolvería el mensaje de error en el navegador y el usuario intentaría otra vez la operación y listos, como he visto en muchos sites. Después tendría que averiguar yo por qué se dan estos errores y solucionarlo, o pedir ayuda a un administrador web experto . ¿O puedo yo evitar o minimizar esos errores de alguna forma?.

Tampoco entiendo por qué pueden llegar a darme errores los procedimientos almacenados, ahora me funcionan perfectamente. Si por ejemplo se introduce un e-mail que no existe en la BD, he programado en la pagina para que me dirija a otra pagina de error informando al usuario que el e-mail es incorrecto.

Gracias,

Ejemplo de un procedimiento almacenado de los que tengo:


CREATE PROCEDURE comprobar_mail_password_inscripcion

@Correo_electronico varchar(50), @Password char(10),
@Oferta_num int, @Data datetime, @Motivos_interes varchar(250)
As
Declare @Demandante_num int

If Exists(select Correo_electronico from Demandantes where Correo_electronico = @Correo_electronico
and Password = @Password)
begin

select @Demandante_num = Demandante_num
from Demandantes
where Correo_electronico = @Correo_electronico
and Password = @Password

select @Demandante_num AS Demandante_num, 1 AS Valor
INSERT INTO Inscripciones_en_ofertas (Oferta_num, Demandante_num, Data, Motivos_interes)
VALUES (@Oferta_num, @Demandante_num, @Data, @Motivos_interes)
end
else
begin
select 0 AS Valor
end
  #2 (permalink)  
Antiguo 04/07/2003, 09:20
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 22 años
Puntos: 7
Unos cuantos 'tips'

- despues de cada INSERT/DELETE/UPDATE atrapa el valor de @@ERROR para que veas si se hizo correctamente o no
POR EJEMPLO:

Declare @W_ERROR INT

INSERT INTO Inscripciones_en_ofertas (Oferta_num, Demandante_num, Data, Motivos_interes)
VALUES (@Oferta_num, @Demandante_num, @Data, @Motivos_interes)
Select @w_error=@@error

if @w_error=0
/* todo se grabo */
else
/* hubo un error */

- necesitas SIEMPRE un OnError en tus ASP por si la cadena de conexion falla. Imaginate que justo alguien esta navegando y de pronto el servidor de base de datos se cae. Si estas usando ADO, entonces tu objeto Connection tiene un array de propiedades Errors. Debe estar vacio. Si no, .Errors(0).description te da el mensaje de ultimo error

- si tienes problemas con la bd, mas que un administrador de web experto lo que necesitas en un dba(database administrator)

- tu SP esta muy bien pero no estas usando transacciones. En ese SP de ejemplo no es problema porque solo operas sobre una tabla, pero si usas mas de una tabla para INSERT/DELETE/UPDATE lo mejor es que uses transacciones. Es simple. Fijate la documentacion de BEGIN TRANS o COMMIT TRANS y si no lo entiendes, pregunta por aca de nuevo y te explico
__________________
No tengo firma ahora... :(
  #3 (permalink)  
Antiguo 04/07/2003, 11:13
 
Fecha de Ingreso: marzo-2003
Mensajes: 38
Antigüedad: 21 años, 1 mes
Puntos: 0
Ok Mickel! Gracias

Referente a:

if @w_error=0
/* todo se grabo */
else
/* hubo un error */

¿Que es lo que determinará si @w_error es igual a 0? ¿Son números que devuelve SQL Server automáticamente en el parámetro @@error? ¿De que me servirá que sepa que ‘hubo un error’ si no sé cuál es éste?

Referente a:

necesitas SIEMPRE un OnError en tus ASP por si la cadena de conexion falla.

¿Quieres decir que tengo que poner algún tipo de sentencia en mi página ASP? ¿Qué es lo que haría un ‘OnError’ en la página exactamente, puedes ponerme algun ejemplo? No entiendo muy bien lo que me explicas a continuación.

Referente a lo de BEGIN TRANS o COMMIT TRANS ya lo miraré mas detenidamente, me suena de haberlo leído en un manual de SQL 2000. Ya te preguntaré sobre esto si me sale alguna duda .

Muchas gracias!
Cesar
  #4 (permalink)  
Antiguo 04/07/2003, 16:51
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 22 años
Puntos: 7
@@error es devuelto por SQL Server automaticamente cuando intentas hacer cualquier operacion de INSERT/DELETE/UPDATE sobre la base de datos. Pero debes capturarlo en una variable para poder evaluarlo. Luego puedes comparar @@error con el numero de mensaje de error del SQL Server
__________________
No tengo firma ahora... :(
  #5 (permalink)  
Antiguo 08/07/2003, 03:46
 
Fecha de Ingreso: marzo-2003
Mensajes: 38
Antigüedad: 21 años, 1 mes
Puntos: 0
He estado documentándome un poco .
Referente a los ‘Transaction Logs’ el manual que tengo explica muy brevemente y sin ejemplos para qué sirven. Dice que en SQL Server hay dos tipos de transacciones, las explícitas y las implícitas, y entiendo que como existen las implícitas no hace falta poner los ‘Transaction Logs’ (begin transaction, rollback transaction, commit transaction, commit work) ya que SQL Server se encarga de ello al ejecutar los sp. ¿Es así?

¿Me podrías poner un ejemplo de un ‘OnError’ en mi pagina ASP VBScript en caso de que la cadena de conexión falle? No sé como ponerlo. Por otro lado, no entiendo muy bien para qué sirve este ‘OnError’ en la página, ya que si la cadena de conexión falla ¿el navegador ya da un error no? Se vuelve a intentar mas tarde y ¿ya está no?

Gracias,
Cesar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:53.