从存储过程返回值

时间:2010-10-11 15:35:17

标签: sql-server vb.net

您好我正在使用vs 2008在vb.net中执行winforms应用程序。我有一个包含单个表的数据库,其中包含两列,以及一个存储过程。存储过程应该采用输入值,将该值与表中的一列匹配,然后从另一列返回相应的值;除了它没有。它返回1或0请任何人都可以告诉我为什么

ALTER PROCEDURE dbo.getgamenumber(@outputnumber bigint OUTPUT,
                                  @inputnumber bigint) 
AS 

  SELECT @outputnumber = ggnumber
    FROM statstable
   WHERE gindex = @inputnumber 

  RETURN  @outputnumber

并且因此调用存储过程

With cmdgetgame
  .CommandType = CommandType.StoredProcedure
  .CommandText = "getgamenumber"
  .Parameters.Add("@outputnumber", SqlDbType.BigInt).Value = outputnumber
  .Parameters("@outputnumber").Direction = ParameterDirection.Output
  .Parameters.AddWithValue("@inputnumber", inputvalue)
  returnvalue = cmd.ExecuteScalar()
End With

感谢所有人和任何帮助。

很抱歉我的vb代码现在看起来很混乱

 With cmdgetgame
                .CommandType = CommandType.StoredProcedure
                .CommandText = "getgamenumber"
                .Parameters.Add("@outputnumber", SqlDbType.BigInt).Value = outputnumber
                .Parameters("@outputnumber").Direction = ParameterDirection.Output
                .Parameters.AddWithValue("@inputnumber", inputvalue)
                cmd.ExecuteNonQuery()
                returnvalue = cmdgetgame.Parameters("@outputnumber").Value
            End With

和我的存储过程就像这样

ALTER PROCEDURE dbo.getgamenumber
( @outputnumber bigint ,
@inputnumber bigint) 
AS 
    SELECT       ggnumber
    FROM            statstable
    WHERE        (gindex = @inputnumber)

但我仍然没有得到我期望的价值。

4 个答案:

答案 0 :(得分:3)

您似乎尝试将@outputnumber用作输出参数和返回值。

将VBS中的参数设置为输出参数时,无需在VB.NET中为该参数设置值。

然后,您不需要return语句。 (并且你不应该在T-SQL中使用RETURN来获取值,无论如何)

获取输出值:

cmd.ExecuteNonQuery()
returnvalue = cmdgetgame.Parameters("@outputnumber").Value

答案 1 :(得分:3)

Blimey我已经完成了。感谢所有提供帮助的人,它向我展示了我最初尝试的倾向。我的vb代码现在看起来像这个

 With cmdgetgame
                .Connection = _con
                .CommandType = CommandType.StoredProcedure
                .CommandText = "getgamenumber"
                .Parameters.AddWithValue("@inputnumber", inputvalue)
                .Parameters.Add("@retvalue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
                .ExecuteNonQuery()
                returnvalue = cmdgetgame.Parameters("@retvalue").Value


            End With

我的存储过程现在看起来像这样

ALTER PROCEDURE dbo.getgamenumber
(
@inputnumber int
) 
as
    declare @retvalue int 

    SELECT       @retvalue = ggnumber
    FROM         statstable
    WHERE        (gindex = @inputnumber)

    return @retvalue

Pheweee我以为我永远不会到那里。再次感谢。

答案 2 :(得分:1)

您可以使用ExecuteNonQuery执行存储过程,然后检查输出参数的值。像:

cmd.ExecuteNonQuery()
returnvalue = .Parameters("@outputnumber").Value

答案 3 :(得分:1)

cmd.ExecuteScalar()将返回结果集第1行的第1列。 修改您的程序:

SELECT @outputnumber

而不是

 RETURN @outputnumber