Asp.net RaiseError没有充分引发错误?
为什么错误不会出现在UI层?我正在使用ExecuteScalerAsp.net RaiseError没有充分引发错误?,asp.net,sql-server,tsql,ado.net,Asp.net,Sql Server,Tsql,Ado.net,为什么错误不会出现在UI层?我正在使用ExecuteScaler BEGIN CATCH PRINT N'The transaction is in an uncommittable state. Rolling back transaction.' ROLLBACK TRANSACTION; DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT;
BEGIN CATCH
PRINT N'The transaction is in an uncommittable state. Rolling back transaction.'
ROLLBACK TRANSACTION;
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState);
END CATCH
谢谢您只能引发用户消息,系统消息只能由引擎引发: 用户定义错误的错误号 消息应大于50000。 如果未指定msg_id, RAISERROR引发一条错误消息 错误号为50000 因此,您无法生成原始的
@ErrorMessage
,必须生成新的错误代码
此外,您的catch块在中是不正确的,因为它假定一个不可提交的事务。情况并非总是如此,在决定交易是否注定失败之前,您必须检查的结果。在许多情况下,错误处理可以继续事务。请参阅。您只能引发用户消息,系统消息只能由引擎引发: 用户定义错误的错误号 消息应大于50000。 如果未指定msg_id, RAISERROR引发一条错误消息 错误号为50000 因此,您无法生成原始的
@ErrorMessage
,必须生成新的错误代码
此外,您的catch块在中是不正确的,因为它假定一个不可提交的事务。情况并非总是如此,在决定交易是否注定失败之前,您必须检查的结果。在许多情况下,错误处理可以继续事务。请参阅。首先,查看Remus关于嵌套事务中的错误处理的文章,这样您就了解了所有内容 然后,尝试强制将错误级别设置为16。此外,在重新显示错误时,请将原始错误信息嵌入错误消息中,以免丢失该信息:
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
DECLARE
@ErrorMessage NVARCHAR(4000)
, @ErrorNumber INT
, @ErrorSeverity INT
, @ErrorState INT
, @ErrorLine INT
SELECT
@ErrorNumber = ERROR_NUMBER()
, @ErrorSeverity = ERROR_SEVERITY()
, @ErrorState = ERROR_STATE()
, @ErrorLine = ERROR_LINE();
SET @ErrorMessage
= '>> Msg %i, Level %i, State %i, Line %i'
+ CHAR(13)+CHAR(10)+ERROR_MESSAGE()
RAISERROR (
@ErrorMessage,16,1
, @ErrorNumber
, @ErrorSeverity
, @ErrorState
, @ErrorLine
)
END CATCH
首先,回顾Remus关于嵌套事务中的错误处理的文章,这样您就了解了所有内容 然后,尝试强制将错误级别设置为16。此外,在重新显示错误时,请将原始错误信息嵌入错误消息中,以免丢失该信息:
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
DECLARE
@ErrorMessage NVARCHAR(4000)
, @ErrorNumber INT
, @ErrorSeverity INT
, @ErrorState INT
, @ErrorLine INT
SELECT
@ErrorNumber = ERROR_NUMBER()
, @ErrorSeverity = ERROR_SEVERITY()
, @ErrorState = ERROR_STATE()
, @ErrorLine = ERROR_LINE();
SET @ErrorMessage
= '>> Msg %i, Level %i, State %i, Line %i'
+ CHAR(13)+CHAR(10)+ERROR_MESSAGE()
RAISERROR (
@ErrorMessage,16,1
, @ErrorNumber
, @ErrorSeverity
, @ErrorState
, @ErrorLine
)
END CATCH
@ONG Ponies:在这个页面上看起来与您发布链接的链接完全相同:(除了回滚之外)回滚事务是否重置了错误?我不明白RAISERROR(@ErrorMessage,@ErrorSeverity,@ErrorState)是怎么回事;如果级别为16且无任何遗憾,则它会引发错误。您是如何捕捉到它的?@Costa,
RAISERROR(@ErrorMessage,@ErrorSeverity,@ErrorState)
不会将错误级别提升到16,无论发生什么,它将其提升到@ErrorSeverity
@ONG-Ponies:在这个页面上看起来与您将链接发布到的链接相同:(除了回滚)回滚事务是否重置了错误?我不明白RAISERROR(@ErrorMessage,@ErrorSeverity,@ErrorState)是怎么回事;如果级别为16且无任何遗憾,则它会引发错误。您是如何捕捉到它的?@Costa,RAISERROR(@ErrorMessage,@ErrorSeverity,@ErrorState)
不会将错误级别提升到16,无论发生什么,它将其提升到@ErrorSeverity
。回滚可提交事务是否有问题?@Costa:提交或回滚可提交事务完全取决于业务逻辑。但是在任何情况下,如果事务不是处于不可提交状态,至少不要打印它。回滚可提交事务是否有问题?@Costa:提交或回滚可提交事务完全取决于业务逻辑。但是在任何情况下,如果事务不是处于不可提交状态,至少不要打印。