Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 捕获前端sql server存储过程返回的错误消息_Asp.net_Sql Server_Stored Procedures - Fatal编程技术网

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