存储过程输出参数返回空

时间:2017-05-12 15:23:10

标签: sql-server vb.net

在我的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

除了结果为空之外,一切都运行正常,没有错误。

1 个答案:

答案 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

这是输出的屏幕截图:

enter image description here

单独考虑转向Option Strict On

  

将隐式数据类型转换限制为仅扩展转换,禁止后期绑定,并禁止导致Object类型的隐式类型。

cmd.Parameters("@TotalNoRatio").Value会返回Object类型。如果您要分配到.ToString(),则应将Label.Text附加到其中。

另请注意,我已实施Using。您可能已经拥有,但很难说,但如果您不值得这样做:

  

有时,您的代码需要非托管资源,例如文件句柄,COM包装器或SQL连接。使用块可确保在代码完成后处理一个或多个此类资源。这使得它们可供其他代码使用。