C# 如何记录存储过程错误

C# 如何记录存储过程错误,c#,sql-server,C#,Sql Server,场景:C#应用程序使用SQL2000。它在应用程序中的一个try-catch中包含3个存储过程。在catch中,错误被抑制。由于某些法律规定,c#代码无法更改和实施 Q:如何将存储过程中的实际SQL错误捕获到日志文件或其他表中@@Error向应用程序返回一条错误消息,但在查询分析器中进行计算时,该消息始终为0,尽管“If@@Error 0”确实会触发。我试图存储@错误号,但它始终为0 请提供帮助。手头没有示例,但请看如何使用 RAISERROR ... WITH LOG 请参阅:了解更多信息

场景:C#应用程序使用SQL2000。它在应用程序中的一个try-catch中包含3个存储过程。在catch中,错误被抑制。由于某些法律规定,c#代码无法更改和实施

Q:如何将存储过程中的实际SQL错误捕获到日志文件或其他表中@@Error向应用程序返回一条错误消息,但在查询分析器中进行计算时,该消息始终为0,尽管“If@@Error 0”确实会触发。我试图存储@错误号,但它始终为0


请提供帮助。

手头没有示例,但请看如何使用

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