首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RAISERROR和回滚事务

RAISERROR和回滚事务
EN

Stack Overflow用户
提问于 2011-02-03 09:38:29
回答 1查看 8.4K关注 0票数 0

我想在asp.net页面中使用如下的sp。

如何将sp中的错误消息显示到asp.net中?

是否有通过调用sp在asp.net中执行此任务的DAL属性示例?

在sp中同时使用RAISERROR和ROLLBACK TRANSACTION是否存在冲突?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-03 16:20:20

我认为问题是你在你的Raiserror上使用了severity level 10

严重度为10或更低时,不允许在.NET代码中捕获异常。

在您的proc中,如果这些条件是错误,建议您提高严重性,以便可以在.NET中捕获异常。

可以通过在连接上订阅InfoMessage event来检测小于10的严重程度-例如here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4881902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档