Throw Ex para SQLServer2005

13/03/2006 - 19:59 por Fher | Informe spam
Hola, en un proc. almacenado de SQLServer2005 utilizo un bloque TRY-CATCH. En
una de las sentencias de mi TRY se produce una excepción de violación de
clave primaria, con lo cual, entra automáticamente en el bloque CATCH. Allí
hago un RAISERROR con el ERROR_NUMBER, etc., pero cuando llega la excepción a
mi aplicación cliente en .NET, el número de error de mi SqlException es
siempre 50000, es decir, siempre convierte la excepción al tipo genérico de
personalizaciones de usuario.

Me gustaría que llegase a mi cliente .NET toda la información del error
(número, estado, procedimiento almacenado donde se ha producido el error,
etc.).

Gracias de antemano. Un saludo.

Preguntas similare

Leer las respuestas

#1 Maxi
13/03/2006 - 21:54 | Informe spam
Hola, te digo como lo manejo yo:

Al existir un error retorno un XML con todo ese dato y lo subo a las capas


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Fher" escribió en el mensaje
news:
Hola, en un proc. almacenado de SQLServer2005 utilizo un bloque TRY-CATCH.
En
una de las sentencias de mi TRY se produce una excepción de violación de
clave primaria, con lo cual, entra automáticamente en el bloque CATCH.
Allí
hago un RAISERROR con el ERROR_NUMBER, etc., pero cuando llega la
excepción a
mi aplicación cliente en .NET, el número de error de mi SqlException es
siempre 50000, es decir, siempre convierte la excepción al tipo genérico
de
personalizaciones de usuario.

Me gustaría que llegase a mi cliente .NET toda la información del error
(número, estado, procedimiento almacenado donde se ha producido el error,
etc.).

Gracias de antemano. Un saludo.
Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
13/03/2006 - 21:55 | Informe spam
Muéstranos el código de lo que haces.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Fher" wrote in message
news:
Hola, en un proc. almacenado de SQLServer2005 utilizo un bloque TRY-CATCH.
En
una de las sentencias de mi TRY se produce una excepción de violación de
clave primaria, con lo cual, entra automáticamente en el bloque CATCH.
Allí
hago un RAISERROR con el ERROR_NUMBER, etc., pero cuando llega la
excepción a
mi aplicación cliente en .NET, el número de error de mi SqlException es
siempre 50000, es decir, siempre convierte la excepción al tipo genérico
de
personalizaciones de usuario.

Me gustaría que llegase a mi cliente .NET toda la información del error
(número, estado, procedimiento almacenado donde se ha producido el error,
etc.).

Gracias de antemano. Un saludo.
Respuesta Responder a este mensaje
#3 Fher
14/03/2006 - 09:09 | Informe spam
Mi código es el siguiente:

BEGIN TRY

... (Sentencia Insert que provoca una violación de clave primaria).

END TRY
BEGIN CATCH
EXEC usp_RethrowError
END CATCH

donde el proc. almacenado (lo he copiado directamente de la documentación de
Books-Online de SQLServer2005) es el siguiente:

CREATE PROCEDURE usp_RethrowError AS
IF ERROR_NUMBER() IS NULL
RETURN;

DECLARE
@ErrorMessage NVARCHAR(4000),
@ErrorNumber INT,
@ErrorSeverity INT,
@ErrorState INT,
@ErrorLine INT,
@ErrorProcedure NVARCHAR(200);

SELECT
@ErrorNumber = ERROR_NUMBER(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ErrorLine = ERROR_LINE(),
@ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-');

RAISERROR
(
@ErrorMessage,
@ErrorSeverity,
1,
@ErrorNumber, -- parameter: original error number.
@ErrorSeverity, -- parameter: original error severity.
@ErrorState, -- parameter: original error state.
@ErrorProcedure, -- parameter: original error procedure name.
@ErrorLine -- parameter: original error line number.
);
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida