Asp.net 捕获前端sql server存储过程返回的错误消息
我正在以以下方式编写存储过程Asp.net 捕获前端sql server存储过程返回的错误消息,asp.net,sql-server,stored-procedures,Asp.net,Sql Server,Stored Procedures,我正在以以下方式编写存储过程 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) RAIS
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
我想在ex.处理该消息。您的存储过程包含一个基本缺陷: 如果在检查(或
@@ROWCOUNT
)的值后执行任何语句,它将重置为零
继续之前,应始终缓存局部变量:
DECLARE @errornum int
SET @errornum = @@ERROR
如果您还需要rowcount,那么您必须在这样一个语句中执行
SELECT @errornum = @@ERROR, @rowcount = @@ROWCOUNT
此外,您不需要混合使用TRY/CATCH
和检查@@ERROR
要处理存储过程中的错误时使用,例如:
BEGIN TRY
-- ...
-- Do Stuff
-- ...
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH
在您的C代码中,catch。我无法理解您的第一句话“您的存储过程包含一个基本缺陷”。此外,我不能从这个答案中得到你想说的要点。你能详细说明一下吗。我不想在程序中获取行计数。我使用Try/Catch处理事务,使用@ERROR获取错误消息。
BEGIN TRY
-- ...
-- Do Stuff
-- ...
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH