【问题标题】:How to use the return value of stored procedure in asp.net?asp.net中如何使用存储过程的返回值?
【发布时间】:2015-02-20 13:34:30
【问题描述】:

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

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

现在我想在我的项目中使用@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 ) 的值为零,这是不正确的。 请帮忙

【问题讨论】:

    标签: sql asp.net stored-procedures


    【解决方案1】:

    如果要获取该值作为存储过程的输出,则需要将其返回。

    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
    

    【讨论】:

      【解决方案2】:

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

      返回值一般用于表示你的程序的状态,不指定为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是默认返回值,这就是为什么你从returnParameter得到0,你需要使用ParameterDirection.Output

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

      【讨论】:

      • 显示此错误:程序或函数 Asbabbazi_A 指定的参数过多。
      • 您能否使用导致此错误的新代码更新您的问题?它应该就像将参数类型从返回更改为输出一样简单
      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      相关资源
      最近更新 更多