Tôi muốn tạo lại cùng một ngoại lệ trong SQL Server vừa xảy ra trong khối thử của tôi. Tôi có thể gửi cùng một thông báo nhưng tôi muốn ném cùng một lỗi.
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);
Dòng này sẽ hiển thị lỗi, nhưng tôi muốn chức năng giống như vậy. Điều này gây ra lỗi với số lỗi 50000, nhưng tôi muốn số lỗi được đưa ra mà tôi đang vượt qua @@error
,
Tôi muốn ghi lại lỗi này không có ở giao diện người dùng.
I E
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Tôi muốn chức năng này. mà không thể đạt được bằng cách sử dụng raiseerror
. Tôi không muốn đưa ra thông báo lỗi tùy chỉnh ở phía sau.
RAISEERROR
sẽ trả về lỗi được đề cập bên dưới khi tôi vượt qua ErrorNo để được ném vào bắt
Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
Dòng 14 Vi phạm ràng buộc KEY DUY NHẤT 'UK_DomainCode'. Không thể chèn khóa trùng lặp trong đối tượng 'Tags.tblDomain'. Các tuyên bố này đã bị chấm dứt.
BIÊN TẬP:
Hạn chế của việc không sử dụng khối try catch là gì nếu tôi muốn ngoại lệ được xử lý ở giao diện người dùng xem xét thủ tục được lưu trữ chứa nhiều truy vấn cần được thực thi?
raiserror
đó, điều này khác với cách c # thoát sau athrow
. Vì vậy, tôi đã thêm mộtreturn
bên trongcatch
bởi vì tôi muốn phù hợp với hành vi đó.