Sql server 存储过程输出参数返回空
在我的SQL Server 2014中,我有一个存储过程,它返回2个变量中的2个值作为输出:Sql server 存储过程输出参数返回空,sql-server,vb.net,Sql Server,Vb.net,在我的SQL Server 2014中,我有一个存储过程,它返回2个变量中的2个值作为输出: @TotalNoRatio @TotalRatio 以下是执行后的结果: @TotalNoRatio @TotalRatio 34510793 31857292 Return Value 0 现在,我希望这两个值显示在表单上的标签中 代码如下: cmd2.CommandType = CommandType.StoredProcedure cmd2.Parameters.Add("
@TotalNoRatio
@TotalRatio
以下是执行后的结果:
@TotalNoRatio @TotalRatio
34510793 31857292
Return Value 0
现在,我希望这两个值显示在表单上的标签中
代码如下:
cmd2.CommandType = CommandType.StoredProcedure
cmd2.Parameters.Add("@TotalNoRatio", SqlDbType.Decimal)
cmd2.Parameters.Add("@TotalRatio", SqlDbType.Decimal)
cmd2.ExecuteNonQuery()
Me.LTotal1.Text = cmd2.Parameters("@TotalNoRatio").Value
Me.LTotal2.Text = cmd2.Parameters("@TotalRatio").Value
除了结果为空之外,一切运行正常,没有错误。您需要将方向定义为返回,如下所示:
SqlParameter retval = sqlcomm.Parameters.Add("@TotalNoRatio", SqlDbType.Decimal);
retval.Direction = ParameterDirection.ReturnValue;
您需要将参数的方向指定为ParameterDirection.Output
。您还需要将过程中的参数声明为OUTPUT
我在下面列出了一个小例子
这是我的程序:
CREATE PROCEDURE [dbo].[procedureName]
@TotalNoRatio DECIMAL(18,2) OUTPUT,
@TotalRatio DECIMAL(18,2) OUTPUT
AS
SET @TotalNoRatio = 2
SET @TotalRatio = 3
这是我的VB.NET代码:
Using con As New SqlConnection(conString),
cmd As New SqlCommand("procedureName", con) With {.CommandType = CommandType.StoredProcedure}
con.Open()
cmd.Parameters.Add(New SqlParameter("@TotalNoRatio", SqlDbType.Decimal) With {.Direction = ParameterDirection.Output})
cmd.Parameters.Add(New SqlParameter("@TotalRatio", SqlDbType.Decimal) With {.Direction = ParameterDirection.Output})
cmd.ExecuteNonQuery()
lTotal1.Text = "TotalNoRatio: " & cmd.Parameters("@TotalNoRatio").Value.ToString()
lTotal2.Text = "TotalRatio: " & cmd.Parameters("@TotalRatio").Value.ToString()
End Using
这是输出的屏幕截图:
在一个单独的音符上考虑转向:
将隐式数据类型转换限制为仅扩大转换、不允许后期绑定以及不允许导致对象类型的隐式类型
cmd.Parameters(“@TotalNoRatio”).Value
返回类型Object
。如果要分配给Label.Text
,则应该在其后面追加.ToString()
还请注意,我已经实现了。你可能已经有了,这很难说,但如果你没有,这是值得做的:
有时,代码需要非托管资源,例如文件句柄、COM包装器或SQL连接。Using块保证在代码使用完一个或多个这样的资源后可以对它们进行处理。这使它们可供其他代码使用
添加参数时,需要指定参数的方向。默认值为输入。