我有一个包含以下代码的存储过程:
IF @somevar IS NULL
BEGIN
RAISERROR (N'Station %d does not exist.', -- Message text.
10, -- Severity,
7, -- State,
@id);
END
我想在 C# 代码中捕获 SqlException。但是没有提出这个例外。我究竟做错了什么?
谢谢。
我有一个包含以下代码的存储过程:
IF @somevar IS NULL
BEGIN
RAISERROR (N'Station %d does not exist.', -- Message text.
10, -- Severity,
7, -- State,
@id);
END
我想在 C# 代码中捕获 SqlException。但是没有提出这个例外。我究竟做错了什么?
谢谢。
我会尝试查看您使用的严重性。 http://msdn.microsoft.com/en-us/library/ms178592.aspx
试试这个: - 我一直使用 16
RAISERROR ('Message here', 16, 1)
0-9返回状态信息或报告不严重错误的信息性消息。数据库引擎不会引发严重性为 0 到 9 的系统错误。
10返回状态信息或报告不严重错误的信息性消息。出于兼容性原因,数据库引擎在将错误信息返回给调用应用程序之前将严重性 10 转换为严重性 0。
11-16表示用户可以纠正的错误。
20-24表示系统问题并且是致命错误,这意味着正在执行语句或批处理的数据库引擎任务不再运行。该任务记录有关发生的事情的信息,然后终止。在大多数情况下,与数据库引擎实例的应用程序连接也可能终止。如果发生这种情况,根据问题,应用程序可能无法重新连接。此范围内的错误消息会影响访问同一数据库中数据的所有进程,并可能表明数据库或对象已损坏。严重级别为 19 到 24 的错误消息将写入错误日志。
我相信您需要更高的严重性级别;以至少 11 的严重性尝试它。另外,您是否使用 ExecuteScalar - 它似乎吃异常?见这里。
你可以试试THROW instruction