- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在有两条 INSERT 指令的存储过程中使用 TRY CATCH block 。
如果出现问题,CATCH block 会负责回滚所有所做的更改并且它工作正常,除了一件事!
我的 ASP.NET 应用程序捕获的异常是编号为 50000 的 SqlException。这不是原来的编号! (我期待的数字是 2627)
在异常的 Message 属性中,我可以看到原始的异常编号和格式化的消息。
如何获取原始异常编号?
try
{
// ... code
}
catch
(SqlException sqlException)
{
switch (sqlException.Number)
{
// Name already exists
case 2627:
throw new ItemTypeNameAlreadyExistsException();
// Some other error
// As the exception number is 50000 it always ends here!!!!!!
default:
throw new ItemTypeException();
}
}
现在返回值已经被使用了。我想我可以使用输出参数来获取异常编号,但这是个好主意吗?
如何获取异常编号?谢谢
PS:这是必需的,因为我有两个 INSERT 指令。
最佳答案
你可以像这样重新抛出它:
..
END TRY
BEGIN CATCH
DECLARE @errnum int;
SELECT @errnum = ERROR_NUMBER();
RAISERROR (@errnum, 16, 1);
END CATCH
但是,由于 ERROR_NUMBER() 的 sys.messages 行中的 %s 等占位符,您很可能失去意义
你可以做这样的事情来包含数字并重新抛出原始消息
..
END TRY
BEGIN CATCH
DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
SELECT
@errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
@errmsg = @errnum + ' ' + ERROR_MESSAGE();
RAISERROR (@errmsg, 16, 1);
END CATCH
前 5 个字符是原始数字。
但如果您有嵌套代码,那么您将得到“00123 00456 错误文本”。
就个人而言,我只处理 SQL 异常编号以将我的错误 (50000) 与我的代码未运行的引擎错误(例如缺少参数)分开。
最后,您可以将其传递给返回值。
我问了一个问题:SQL Server error handling: exceptions and the database-client contract
关于c# - SQL 服务器 : Rethrow exception with the original exception number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882788/
关于 java-7 功能“精确重新抛出”和 final Exception ex 有很多问题,我找不到我的问题的明确答案。 “精确重新抛出”和final Exception之间有什么关系? publi
在 Swift 2 中,以下函数不会编译,即使函数中的所有调用都不会抛出。 func function1(f: Optional U>, x: Optional) -> Optional {
本文整理了Java中xapi.util.X_Util.rethrow()方法的一些代码示例,展示了X_Util.rethrow()的具体用法。这些代码示例主要来源于Github/Stackoverfl
如果我有这样的代码: let result; try { result = doSomethingThatCanThrow(); } catch (e) { throw new Err
我无法理解精确重新抛出在 Java 7 及更高版本中的工作原理。正如 https://www.theserverside.com/tutorial/OCPJP-Use-more-precise-ret
如果有一个带有多个 catch block 的 try-catch,是否有办法将异常重新抛出到下一个(不是底层的)catch 子句? 例子: try { // some exception can
这是我的方法,当我尝试通过 sonarQube 分析我的代码时收到此错误: 异常处理程序应保留原始异常:记录或重新抛出此异常。 为什么会出现此错误,我不应该像我的方法一样捕获异常吗? 我的方法: fo
我对这两个主题非常不确定。我知道我应该对需要以相同方式处理的异常使用 multi-catch。但是为了什么目的我真的需要这样的东西。 private void something(String nam
如果我想捕获除给定类型之外的所有异常,并且这些特定类型将被重新抛出以在更高的上下文中被捕获,这样做会更好吗: try { //Code that might throw an exceptio
在将代码与 Maven 集成后,我正在运行 SonarQube 5 进行代码质量检查。 Sonar 提示我应该: Either log or rethrow this exception. 在下面的代
本文整理了Java中org.sonar.api.utils.text.XmlWriter.rethrow()方法的一些代码示例,展示了XmlWriter.rethrow()的具体用法。这些代码示例主要
我在 try-catch 语句中有一个 try-catch 语句。内层catch捕获错误,但out catch语句中throw并没有导致错误被捕获。 Breifly,我的脚本格式类似于: $Error
您好,我正在学习 express 和 passport,我试着做一个注册表单,当我尝试使用 MySQL 插入一行时,我收到了这个错误,但我的表正在正确更新。 passport.use( 'lo
是否有这段代码 try { opaque_function_that_might_throw_arbitrary_exception (); } catch (...) { throw
我在有两条 INSERT 指令的存储过程中使用 TRY CATCH block 。 如果出现问题,CATCH block 会负责回滚所有所做的更改并且它工作正常,除了一件事! 我的 ASP.NET 应
我遇到过我必须在流表达式中捕获所有已检查的异常。我读过非常流行的话题: How can I throw CHECKED exceptions from inside Java 8 streams? 并
以下两种代码在什么情况下不等价? { // some code, may throw and/or have side effects } try { // same code as abov
我正在使用 java 11 和 Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008 14:17:44 版权所有 (c) 19
我有一个 WPF 应用程序,我在其中使用 System.Threading.Tasks 进行长时间运行的 WCF 调用。我通过向 Application.Current.DispatcherUnhan
public class TestException extends except2 { public static void main(String[] args)throws Except
我是一名优秀的程序员,十分优秀!