让我解释一下场景:我有这段代码和存储过程。
案例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 中,尝试捕获错误处理的一个原因主要是正确回滚事务。 之后,您应该抛出错误,以便客户端应用程序了解该错误。
我们可以使用以下命令获取所有可能的 SQL 异常:
SELECT * FROM sysmessages
这些异常可以在 try catch 块中处理:
try
{
//code
}
catch(SqlException sqlEx)
{
if (sqlEx.Message.StartsWith("Invalid object name"))
{
//code
}
else
throw;
}
了解可能错误的另一种方法:
直接在 sql-server 上执行和调试存储过程,稍后可以在 try-catch 块中处理所有可能的异常。