Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在执行存储过程时从SQL Server Try Catch中查找发生的异常类型_C#_Sql Server_Exception_Transactions_Try Catch - Fatal编程技术网

C# 如何在执行存储过程时从SQL Server Try Catch中查找发生的异常类型

C# 如何在执行存储过程时从SQL Server Try Catch中查找发生的异常类型,c#,sql-server,exception,transactions,try-catch,C#,Sql Server,Exception,Transactions,Try Catch,我正在执行一个存储过程,其中包含一些代码,并将其放入一个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); re

我正在执行一个存储过程,其中包含一些代码,并将其放入一个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);  
}

请为我提供此问题的解决方案

引发的错误可作为

e、 g


您可以使用自定义SQL中的数字,或者更好的是,使用引发的错误可以作为

e、 g

您可以使用自定义SQL中的数字,或者更好地使用,您可以尝试

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
你可以试试

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

如果可能,请删除sp中的try catch并添加c代码。编辑:还可以在c#中添加事务处理。在我的情况下,这是可能的,但仍然有任何方法可以跟踪错误。不幸的是,我无法帮助:(如果可能,请删除sp中的try catch并添加c#代码。编辑:还可以在c#中添加事务处理。在我的情况下,这是可能的,但仍然有任何方法可以跟踪错误。不幸的是,我无法帮助:(