您好我正在使用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)
但我仍然没有得到我期望的价值。
答案 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