【问题标题】:How to find what type of exception occur from SQL Server Try Catch while executing stored procedure如何在执行存储过程时从 SQL Server Try Catch 中查找发生了什么类型的异常
【发布时间】:2014-01-02 10:01:54
【问题描述】:

我正在执行一个存储过程,它里面有一些代码,我把它放在一个 try catch 块中,比如

BEGIN Transaction Tran1  
BEGIN Try
    //Stored procedure code
COMMIT TRANSACTION  Tran1   
END Try

BEGIN Catch
ROLLBACK TRANSACTION Tran1 
    raiserror('Cannot commit transaction', 16, 1, @@error);
    return;
END Catch

当发生任何错误时,它会转到Catch 块并引发错误,这是用户定义的错误,但它不会引发实际发生的错误类型。那么,当我们从前端执行它时,我怎么能得到真正发生的错误类型,就像我们在 C# 中所做的那样

Try  
{  
  //Some code  
}  
Catch(Exception ex)  
{  
  MessageBox.Show(ex.message);  
}

请为我提供解决方案

【问题讨论】:

  • 如果可能的话,去掉sp中的try catch,加入c#代码。编辑:还要在 c# 中添加您的事务处理。
  • 在我的情况下这是可能的,但仍然有任何方法可以跟踪错误
  • 不幸的是我无能为力:(

标签: c# sql-server exception transactions try-catch


【解决方案1】:

引发的错误可以作为 SqlException 捕获

例如

catch (SqlException sqlEx)
{
   if (sqlEx.Number == 50000)
   {
      // 
   }
}

您可以使用msg_id flavour of RAISERROR 自定义 SQL 中的 Number,或者更好的是使用 THROW

【讨论】:

    【解决方案2】:

    你可以试试

    BEGIN Transaction Tran1  
    BEGIN Try
       //Stored procedure code
    COMMIT TRANSACTION  Tran1   
    END Try
    
    BEGIN Catch
    ROLLBACK TRANSACTION Tran1      
       SELECT 
    ERROR_NUMBER() AS ErrorNumber,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_STATE() as ErrorState,
    ERROR_PROCEDURE() as ErrorProcedure,
    ERROR_LINE() as ErrorLine,
    ERROR_MESSAGE() as ErrorMessage;   
    
          END CATCH
    

    【讨论】:

      猜你喜欢
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2010-12-01
      相关资源
      最近更新 更多