C# 如何记录存储过程错误
场景:C#应用程序使用SQL2000。它在应用程序中的一个try-catch中包含3个存储过程。在catch中,错误被抑制。由于某些法律规定,c#代码无法更改和实施 Q:如何将存储过程中的实际SQL错误捕获到日志文件或其他表中@@Error向应用程序返回一条错误消息,但在查询分析器中进行计算时,该消息始终为0,尽管“If@@Error 0”确实会触发。我试图存储@错误号,但它始终为0C# 如何记录存储过程错误,c#,sql-server,C#,Sql Server,场景:C#应用程序使用SQL2000。它在应用程序中的一个try-catch中包含3个存储过程。在catch中,错误被抑制。由于某些法律规定,c#代码无法更改和实施 Q:如何将存储过程中的实际SQL错误捕获到日志文件或其他表中@@Error向应用程序返回一条错误消息,但在查询分析器中进行计算时,该消息始终为0,尽管“If@@Error 0”确实会触发。我试图存储@错误号,但它始终为0 请提供帮助。手头没有示例,但请看如何使用 RAISERROR ... WITH LOG 请参阅:了解更多信息
请提供帮助。手头没有示例,但请看如何使用
RAISERROR ... WITH LOG
请参阅:了解更多信息
或使用:
xp_logevent {error_number, 'message'} [, 'severity']
写入事件日志。有关详细信息,请参见
@@ERROR
在检查时重置为0。为什么?因为它反映了最后执行的语句的状态
IF @@ERROR <> 0 ...
我自己没有尝试过,但我想您可以使用Sql Server Profiler监视错误
ALTER PROCEDURE [dbo].[StoreProcedureName]
(
parameters
)
AS
BEGIN
SET NOCOUNT On
BEGIN TRY
--type your query
End Try
BEGIN CATCH
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
RETURN -1
END CATCH
End
ALTER PROCEDURE [dbo].[StoreProcedureName]
(
parameters
)
AS
BEGIN
SET NOCOUNT On
BEGIN TRY
--type your query
End Try
BEGIN CATCH
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
RETURN -1
END CATCH
End