Try bloğumda az önce oluşan aynı istisnayı SQL Server'da yeniden atmak istiyorum. Aynı mesajı atabiliyorum ama aynı hatayı atmak istiyorum.
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);
Bu satır hata gösterecek, ancak bunun gibi bir işlevsellik istiyorum. Bu, 50000 hata numaralı hataya neden olur, ancak geçtiğim hata numarasının atılmasını istiyorum@@error
,
Bu hatayı ön uçta yakalamak istiyorum.
yani
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Bu işlevi istiyorum. hangi kullanılarak elde edilemez raiseerror
. Arka uçta özel hata mesajı vermek istemiyorum.
RAISEERROR
catch'te atılacak ErrorNo'yu geçtiğimde aşağıda belirtilen hatayı döndürmeli
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Satır 14 UNIQUE KEY kısıtlaması 'UK_DomainCode' ihlali. Yinelenen anahtar 'Tags.tblDomain' nesnesine eklenemez. Açıklama sona erdirildi.
DÜZENLE:
Saklı yordamın yürütülmesi gereken birden çok sorgu içerdiğini düşünerek istisnanın ön uçta işlenmesini istiyorsam, try catch bloğunu kullanmamanın dezavantajı ne olabilir?
raiserror
, bu, c # 'nin athrow
. Bu yüzden bu davranışı eşleştirmek istediğim içinreturn
içine bir ekledimcatch
.