РЕЙСЕРРОР И РОЛБАК СДЕЛКА - PullRequest
       19

РЕЙСЕРРОР И РОЛБАК СДЕЛКА

0 голосов
/ 03 февраля 2011

Я хочу использовать sp как показано на странице asp.net.

Как я могу показать сообщения об ошибках в sp в asp.net?

Любой пример свойства DAL для выполнения задачи в asp.net путем вызова sp?

Есть ли конфликт между использованием RAISERROR и ROLLBACK TRANSACTION в sp?

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

1 Ответ

1 голос
/ 03 февраля 2011

Я думаю, проблема в том, что вы используете уровень серьезности 10 на вашем Raiserror.

Уровни серьезности от 10 и менее не позволяют исключению попадать в ваш код .NET.

Если в этих процессах есть ошибки, рекомендуется повысить уровень серьезности, чтобы исключение можно было перехватить в .NET.

Серьезность менее 10 может быть обнаружена путем подписки на InfoMessage событие в Соединении - пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...