c# - 如何知道在C#代码中具有TRY CATCH处理的存储过程中是否存在错误

标签 c# sql-server stored-procedures error-handling try-catch

让我解释一下场景:我有这段代码和存储过程。

情况1:

C#代码:

try 
{
     call uspMyProcedure using ado.net 
}
catch 
{
     Log exception 
}

存储过程
uspMyProcedure (*without try catch*)

在这种情况下1,我可以知道存储过程中是否有错误,因为C#代码中捕获了异常。

情况2:

C#代码:
try 
{ 
    call uspMyProcedure using ado.net 
}
catch 
{
    Log exception 
}

存储过程
uspMyProcedure (*with try catch*)

这种情况2,我怎么知道存储过程中是否有错误,因为C#代码没有捕获异常。

谢谢。

麦克风

最佳答案

在SQL Server中,您可以在catch语句中重新抛出错误。例如:-

SQL Server 2012或以上

BEGIN TRY  
.....
END TRY  
BEGIN CATCH    
    PRINT 'In catch block.';  
    THROW;  
END CATCH;

早于SQL Server 2012
BEGIN TRY
....
END TRY
BEGIN CATCH
    DECLARE @ErrorMessage nvarchar(max), @ErrorSeverity int, @ErrorState int
    SELECT @ErrorMessage = N'Error Number: ' + CONVERT(nvarchar(5), ERROR_NUMBER()) + N'. ' + ERROR_MESSAGE() + ' Line ' + CONVERT(nvarchar(5), ERROR_LINE()), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE()
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)
END CATCH

在SQL Server中尝试-捕获错误处理的原因主要是正确回滚事务。之后,您应该抛出错误,以便客户端应用程序可以了解该错误。

关于c# - 如何知道在C#代码中具有TRY CATCH处理的存储过程中是否存在错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47047773/

相关文章:

c# - SQL Server - 将 tinyint 与枚举一起使用

c# - 一个具有不同返回类型的函数......可以使用泛型吗?

sql - 使用count优化SQL查询

sql-server - SQL Server 查找所有计算列和非持久列

sql - 定义返回多列的 Postgres SQL-lang 函数的正确方法是什么?

c# - Asp.Net core 如何替换配置管理器

c# - 将(流利的)NHibernate 与 StructureMap(或任何 IoCC)一起使用

c# - EF Core Compress 解压列

database - 有没有存储过程的替代方案?

java - 从 Java 调用存储过程 - Spring JDBC 的现代替代品?