如何在asp.net中使用存储过程的return值?

How to use the return value of stored procedure in asp.net?

我使用这个存储过程来获取记录数

ALTER PROCEDURE  [dbo].[Asbabbazi_A]
@count int output
AS
BEGIN
if(@count=0)
set @count =( select count(*)   from dbo.Table_asbabbazi where (active= 0))
end

现在我想在我的 project.I 中使用 @count 编写此代码以在方法中使用 @count。

 SqlConnection con = new SqlConnection(constr);
        cmd.Connection = con;
        con.Open();
        DataAdapter.SelectCommand = cmd;
        DataSet ds = new DataSet("haftehbazardb");
        SqlCommandBuilder bldr = new SqlCommandBuilder(DataAdapter);

        SqlParameter returnParameter = cmd.Parameters.Add("count", SqlDbType.Int);
        returnParameter.Direction = ParameterDirection.ReturnValue;

        cmd.ExecuteNonQuery();

        DataAdapter.Fill(ds, Table_asbabbazi);
        countrecords = (int)returnParameter.Value;

此代码没有错误,但是当我在我的项目中使用 (countrecords) 时,(countrecords) 的值为零,这是不正确的。 请帮助

如果要获取值作为存储过程的输出,则需要return它。

ALTER PROCEDURE  [dbo].[Asbabbazi_A]
@count int output
AS
BEGIN
if(@count=0)
set @count =( select count(*)   from dbo.Table_asbabbazi where (active= 0))

return @count
end

您将输出参数与 return 值混淆了。

Return值一般用来表示你程序的状态,不指定则为0,如

CREATE PROCEDURE dbo.TestProc @Out INT OUTPUT
AS
BEGIN
    BEGIN TRY
        SET @Out = 1 / 0;
        RETURN 0;
    END TRY
    BEGIN CATCH
        SET @Out = 0;
        RETURN 1;
    END CATCH
END

然后用 T-SQL;

调用
DECLARE @out INT, @return INT;  
EXECUTE @Return = dbo.TestProc @out OUT;
SELECT [Return] = @return, [out] = @out;

将给予:

Return | out
-------+-----
   1   |  0

因为 0 是默认的 return 值,这就是为什么你从 returnParameter 中得到 0 的原因,你需要使用 ParameterDirection.Output:

SqlParameter returnParameter = cmd.Parameters.Add("count", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.Output;