Quiero volver a generar la misma excepción en SQL Server que acaba de ocurrir en mi bloque try. Puedo lanzar el mismo mensaje pero quiero lanzar el mismo error.
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO Tags.tblDomain (DomainName, SubDomainId, DomainCode, Description)
VALUES(@DomainName, @SubDomainId, @DomainCode, @Description)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
declare @severity int;
declare @state int;
select @severity=error_severity(), @state=error_state();
RAISERROR(@@Error,@ErrorSeverity,@state);
ROLLBACK TRANSACTION
END CATCH
RAISERROR(@@Error, @ErrorSeverity, @state);
Esta línea mostrará un error, pero quiero una funcionalidad como esa. Esto genera un error con el número de error 50000, pero quiero que se arroje el número de error que estoy pasando @@error
,
Quiero capturar este error no en la interfaz.
es decir
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Quiero esta funcionalidad. que no se puede lograr usando raiseerror
. No quiero dar un mensaje de error personalizado al final.
RAISEERROR
debería devolver el error mencionado a continuación cuando paso ErrorNo para ser arrojado en la captura
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Línea 14 Violación de la restricción UNIQUE KEY 'UK_DomainCode'. No se puede insertar una clave duplicada en el objeto 'Tags.tblDomain'. La instrucción se ha terminado.
EDITAR:
¿Cuál puede ser el inconveniente de no usar el bloque try catch si quiero que la excepción se maneje en el frontend considerando que el procedimiento almacenado contiene múltiples consultas que deben ejecutarse?
raiserror
, que es diferente de cómo c # sale después de unthrow
. Así que agregué unreturn
interiorcatch
porque quería igualar ese comportamiento.