Voglio rilanciare la stessa eccezione in SQL Server che si è appena verificata nel mio blocco try. Sono in grado di lanciare lo stesso messaggio ma voglio lanciare lo stesso errore.
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);
Questa riga mostrerà un errore, ma voglio una funzionalità simile. Ciò solleva un errore con il numero di errore 50000, ma voglio che venga lanciato il numero di errore che sto passando @@error
,
Voglio catturare questo errore no sul frontend.
cioè
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Voglio questa funzionalità. che non può essere ottenuto utilizzando raiseerror
. Non voglio fornire un messaggio di errore personalizzato al back-end.
RAISEERROR
dovrebbe restituire l'errore sotto indicato quando passo ErrorNo da lanciare in catch
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Riga 14 Violazione del vincolo UNIQUE KEY "UK_DomainCode". Impossibile inserire la chiave duplicata nell'oggetto "Tags.tblDomain". La dichiarazione è stata interrotta.
MODIFICARE:
Quale può essere lo svantaggio di non utilizzare il blocco try catch se voglio che l'eccezione venga gestita al frontend considerando che la stored procedure contiene più query che devono essere eseguite?
raiserror
, il che è diverso da come c # esce dopo un filethrow
. Quindi ho aggiunto unreturn
all'interno delcatch
perché volevo abbinare quel comportamento.