在我的SQL Server 2014中,我有一个存储过程,它返回2个变量中的2个值作为输出:
@TotalNoRatio
@TotalRatio
以下是执行后的结果:
@TotalNoRatio @TotalRatio
34510793 31857292
Return Value 0
现在我希望这两个值显示在我表单的Label
中。
以下是代码:
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
除了结果为空之外,一切都运行正常,没有错误。
答案 0 :(得分:0)
您需要将参数的方向指定为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
这是输出的屏幕截图:
单独考虑转向Option Strict On:
将隐式数据类型转换限制为仅扩展转换,禁止后期绑定,并禁止导致Object类型的隐式类型。
cmd.Parameters("@TotalNoRatio").Value
会返回Object
类型。如果您要分配到.ToString()
,则应将Label.Text
附加到其中。
另请注意,我已实施Using。您可能已经拥有,但很难说,但如果您不值得这样做:
有时,您的代码需要非托管资源,例如文件句柄,COM包装器或SQL连接。使用块可确保在代码完成后处理一个或多个此类资源。这使得它们可供其他代码使用。