gpt4 book ai didi

asp.net - 在前端捕获从 sql server 存储过程返回的错误消息

转载 作者:行者123 更新时间:2023-12-05 01:03:20 25 4
gpt4 key购买 nike

我正在用以下方式编写存储过程..

CREATE PROCEDURE spTest
@intCompId int,
@varCompName varchar(50)
AS
BEGIN
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO tblCompanyMaster(CompId,CompName)
VALUES (@intCompId,@varCompName)
IF(@@ERROR<>0)
RAISERROR('Error',10,1)
SELECT ERROR_MESSAGE()

IF(@@ERROR=0)
BEGIN
COMMIT TRANSACTION
SELECT 0;
END
ELSE
ROLLBACK TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END
GO

在这种情况下,如果发生错误,它将返回错误消息。我用 sqlcommand 属性从前端调用这个 sp,比如 oSqlcommand.executeNonQuery();它将返回受影响的行数,否则返回零。现在我想要的是,如果存储过程中出现任何错误,那么 error_message() 返回的消息应该在前端作为异常捕获,因为我正在将每个异常写入文本文件中。如何在前端捕获此消息?我的编码风格如下......

try
{

//Some code

}
catch(exception ex)
{

//Write exception in text file.

}

我想在 ex. 处处理该消息。

最佳答案

您的存储过程包含一个根本缺陷:

如果您在检查 @@ERROR 的值后执行任何语句(或 @@ROWCOUNT),它被重置为零。

在继续之前,您应该始终缓存在局部变量中:

DECLARE @errornum int
SET @errornum = @@ERROR

如果您还需要行数,那么您必须像这样在单个语句中执行

SELECT @errornum = @@ERROR, @rowcount = @@ROWCOUNT

此外,您不需要混合使用 TRY/CATCH 和检查 @@ERROR

您使用 TRY/CATCH当你想处理存储过程中的错误时,例如:

BEGIN TRY
-- ...
-- Do Stuff
-- ...
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH

在您的 C# 代码中,捕获 SqlException

关于asp.net - 在前端捕获从 sql server 存储过程返回的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com