personalizacion de errores SQL en ASP

17/02/2006 - 22:46 por Fabio Enrique Bolívar M | Informe spam
Hola amigos del foro

Hay alguna manera de capturar errores que devuelve MSSQL y "maquillarlos"
para que el usuario normal lo entienda?

Es decir, si sale este error porque estoy metiendo datos no validos

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]INSERT statement conflicted
with COLUMN FOREIGN KEY constraint 'fk_tadministrador3'. The conflict
occurred in database 'mundo', table 'TADMINISTRADOR', column
'idtadministrador'

entonces "maquillarlo" y ponerlo

"Usted está tratando de ingresar un tipo de administrador que no existe".

Me imagino es capturando algún numero de error con "Err.Number", pero este
siempre me saca el mismo número de error, asi sea por causas diferentes.

Lo usaría también cuando voy a borrar datos, y que sea la BD la encargada de
verificar si ese dato se está usando en otra parte (borrar en cascada) y me
parece redundante verificar eso en código de asp, siendo que en la BD ya
está definido el constreint.

Si estoy errado sobre la "filosofía" del manejo de errores, por favor me
inican y yo miro de la nueva forma que ustedes crean más conveniente.

Muchas gracias de antemano.

***Fabio Bolívar***

Preguntas similare

Leer las respuestas

#1 Miguel Gonzalez
19/02/2006 - 20:02 | Informe spam
Hola Fabio.

Hasta donde sé, tienes que capturar el error mediante "On Error" e identificarlo con "Err.Number".

Luego, mediante un "Select" sobre dicho número, podrás escoger el mensaje a presentar al usuario.

Sobre los números de error de SQLServer la "master database" tiene una tabla de sistema
("sysmessages") que contiene todos los códigos de error. Los errores específicos de ADO, por su
parte, puedes consultarlos en:

http://msdn.microsoft.com/library/d...ueenum.asp

De todas formas, creo que es mejor prevenir y evitar los errores validando los datos antes de
enviarlos al servidor de bases de datos (por cuestiones de eso que llaman "performance").

En proceso de desarrollo es muy interesante disponer de la mayor información posible sobre los
errores, aunque soy de la opinión que, una vez la aplicación está activa, la información del error
enviada al usuario debe ser lo más genérica (¿neutra?) posible, dando el menor número de pistas: una
estrategia clásica del "hacking" consiste en provocar errores en las aplicaciones para a partir de
la información de error averiguar datos sobre su funcionamiento interno (en el caso de las bases de
datos: estructura, tablas, nombres de campos, relaciones, etc.)

Saludos!
Miguel


Fabio Enrique Bolívar M escribió:
Hola amigos del foro

Hay alguna manera de capturar errores que devuelve MSSQL y "maquillarlos"
para que el usuario normal lo entienda?

Es decir, si sale este error porque estoy metiendo datos no validos

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]INSERT statement conflicted
with COLUMN FOREIGN KEY constraint 'fk_tadministrador3'. The conflict
occurred in database 'mundo', table 'TADMINISTRADOR', column
'idtadministrador'

entonces "maquillarlo" y ponerlo

"Usted está tratando de ingresar un tipo de administrador que no existe".

Me imagino es capturando algún numero de error con "Err.Number", pero este
siempre me saca el mismo número de error, asi sea por causas diferentes.

Lo usaría también cuando voy a borrar datos, y que sea la BD la encargada de
verificar si ese dato se está usando en otra parte (borrar en cascada) y me
parece redundante verificar eso en código de asp, siendo que en la BD ya
está definido el constreint.

Si estoy errado sobre la "filosofía" del manejo de errores, por favor me
inican y yo miro de la nueva forma que ustedes crean más conveniente.

Muchas gracias de antemano.

***Fabio Bolívar***





Respuesta Responder a este mensaje
#2 Fabio Enrique Bolívar M
20/02/2006 - 05:33 | Informe spam
Hola Miguel

Sí, el objetivo es mandarle errores de tipo genérico como "ese nombre de
usuario ya está siendo utilizado" o algo así, nunca darle datos exactos.
Además para qué, quedarian locos ;-)

Muchas gracias

***Fabio Enrique***

"Miguel Gonzalez" escribió en el mensaje
news:
Hola Fabio.

Hasta donde sé, tienes que capturar el error mediante "On Error" e
identificarlo con "Err.Number".

Luego, mediante un "Select" sobre dicho número, podrás escoger el mensaje a
presentar al usuario.

Sobre los números de error de SQLServer la "master database" tiene una tabla
de sistema
("sysmessages") que contiene todos los códigos de error. Los errores
específicos de ADO, por su
parte, puedes consultarlos en:

http://msdn.microsoft.com/library/d...ueenum.asp

De todas formas, creo que es mejor prevenir y evitar los errores validando
los datos antes de
enviarlos al servidor de bases de datos (por cuestiones de eso que llaman
"performance").

En proceso de desarrollo es muy interesante disponer de la mayor información
posible sobre los
errores, aunque soy de la opinión que, una vez la aplicación está activa, la
información del error
enviada al usuario debe ser lo más genérica (¿neutra?) posible, dando el
menor número de pistas: una
estrategia clásica del "hacking" consiste en provocar errores en las
aplicaciones para a partir de
la información de error averiguar datos sobre su funcionamiento interno (en
el caso de las bases de
datos: estructura, tablas, nombres de campos, relaciones, etc.)

Saludos!
Miguel


Fabio Enrique Bolívar M escribió:
Hola amigos del foro

Hay alguna manera de capturar errores que devuelve MSSQL y "maquillarlos"
para que el usuario normal lo entienda?

Es decir, si sale este error porque estoy metiendo datos no validos

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]INSERT statement conflicted
with COLUMN FOREIGN KEY constraint 'fk_tadministrador3'. The conflict
occurred in database 'mundo', table 'TADMINISTRADOR', column
'idtadministrador'

entonces "maquillarlo" y ponerlo

"Usted está tratando de ingresar un tipo de administrador que no existe".

Me imagino es capturando algún numero de error con "Err.Number", pero este
siempre me saca el mismo número de error, asi sea por causas diferentes.

Lo usaría también cuando voy a borrar datos, y que sea la BD la encargada
de verificar si ese dato se está usando en otra parte (borrar en cascada)
y me parece redundante verificar eso en código de asp, siendo que en la BD
ya está definido el constreint.

Si estoy errado sobre la "filosofía" del manejo de errores, por favor me
inican y yo miro de la nueva forma que ustedes crean más conveniente.

Muchas gracias de antemano.

***Fabio Bolívar***





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida