Ich möchte dieselbe Ausnahme in SQL Server erneut auslösen, die in meinem Try-Block aufgetreten ist. Ich kann dieselbe Nachricht senden, aber ich möchte denselben Fehler auslösen.
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);
Diese Zeile zeigt Fehler, aber ich möchte Funktionalität so etwas. Dies löst einen Fehler mit der Fehlernummer 50000 aus, aber ich möchte, dass eine Fehlernummer ausgegeben wird, die ich übergebe @@error
.
Ich möchte diesen Fehler nicht im Frontend erfassen
dh
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Ich möchte diese Funktionalität. was mit Raiseerror nicht erreicht werden kann. Ich möchte keine benutzerdefinierte Fehlermeldung am Backend geben.
RAISEERROR sollte den unten genannten Fehler zurückgeben, wenn ich ErrorNo übergebe, um in catch geworfen zu werden
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Zeile 14 Verletzung der UNIQUE KEY-Einschränkung 'UK_DomainCode'. Es kann kein doppelter Schlüssel in das Objekt 'Tags.tblDomain' eingefügt werden. Die Anweisung wurde beendet.
BEARBEITEN:
Was kann der Nachteil sein, wenn der try catch-Block nicht verwendet wird, wenn eine Ausnahme im Frontend behandelt werden soll, wenn die gespeicherte Prozedur mehrere Abfragen enthält, die ausgeführt werden müssen
raiserror
, was sich davon unterscheidet, wie c # nach a beendet wirdthrow
. Also habe ich einreturn
Inside hinzugefügt,catch
weil ich diesem Verhalten entsprechen wollte.