2011-02-03 103 views
0

我想在asp.net頁面中使用sp。RAISERROR和ROLLBACK TRANSACTION

如何顯示sp中的錯誤消息到asp.net中?

任何通過調用sp在asp.net中執行任務的DAL屬性示例?

在sp中使用RAISERROR和ROLLBACK TRANSACTION之間是否存在任何衝突?

ALTER PROCEDURE [dbo].[Cyrex_ChangeUsername] 

@oldName nvarchar(128), 
@newName nvarchar(128) 

AS 

declare @error_var int, @rowcount_var int 
declare @newNameCount int 

begin transaction 

select @newNameCount = count(*) 
    from Users 
    where Username = ltrim(rtrim(@newName)) 
if @newNameCount > 0 
begin 
    RAISERROR('Username already exists. @newName=%s', 10, 1, @newName) 
    ROLLBACK TRANSACTION 
    RETURN 
end 

update Users 
set Username = ltrim(rtrim(@newName)) 
where Username = ltrim(rtrim(@oldName)) 

SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT 
IF @rowcount_var <> 1 OR @error_var <> 0 
BEGIN 
    RAISERROR('Could not Update User.Username. @oldName=%s', 10, 1, @oldName) 
    ROLLBACK TRANSACTION 
    RETURN 
END 


update aspnet_Users 
set 
    Username = @newName, 
    LoweredUserName = LOWER(@newName) 
where LoweredUserName = LOWER(@oldName) 

SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT 
IF @rowcount_var <> 1 OR @error_var <> 0 
BEGIN 
    RAISERROR('Could not Update aspnet_Users.Username. @oldName=%s', 10, 1, @oldName) 
    ROLLBACK TRANSACTION 
    RETURN 
END 

Commit transaction 
+0

請問SQL Server的版本是? – gbn 2011-02-03 06:44:49

回答

1

我認爲問題在於您在Raiserror上使用severity level 10

嚴重程度爲10或更小的程序不允許將異常困在您的.NET代碼中。

在你的過程中,如果這些條件是錯誤的,會建議你增加嚴重程度,以便可以在.NET中捕獲異常。

通過訂閱連接上的InfoMessage event可以檢測到小於10的嚴重性 - 示例爲here

+0

Thx爲你提供幫助。我有另一個問題 。我只是想知道你關於通過sql發送錯誤到asp.net的想法。是否對sql服務器負有重任,它會降低sql和網絡的性能?或在insql中使用錯誤處理在BLL中做同樣的過程? – arlen 2011-02-03 17:59:24

相關問題