![](/img/trans.png)
[英]Raiserror in procedure (SQL Server 2005) is not caught in update process in client side(c#)
[英]Raiserror in procedure (SQL Server 2014) does not catch client side(c#)
存储过程捕获块代码。
alter PROCEDURE [dbo].[TESTError]
(
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SELECT 5/0
END TRY
BEGIN CATCH
DECLARE @ErrorNumber INT
SELECT @ErrorNumber = ERROR_NUMBER()
RAISERROR
(N'The error code is: %d',
16, -- Severity.
1, -- State.
@ErrorNumber,
'');
END CATCH
END
使用SSMS运行时,以上存储过程引发并显示错误。
.Net客户端代码仅例外部分。
catch (SqlException ex)
{
string msg = string.Format("Error number: {0} / Message: {1}", ex.Number, ex.Message);
}
当应用程序调用存储过程时,它不会捕获异常块。
任何暗示或想法都会对我有所帮助。
catch (SqlException ex)
{
string msg = string.Format("Error number: {0} / Message: {1}", ex.Number, ex.Message);
}
即使输入了该捕获块,您期望发生什么? 字符串变量将获得一个值,该值将在下一毫秒内消失。
无论如何:每当您处理专用(类型化)捕获块时,您都应该有充分的理由不额外使用通用捕获块(这是您专用的捕获块的最后一项):
catch (System.Exception sysex)
{
string msg = string.Format("Error number: {0} / Message: {1}", sysex.Number, sysex.Message);
//Do something with this information!
}
要不就
catch{throw;}
这取决于您的需求和工具/调试习惯...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.