Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 存储过程输出参数返回空_Sql Server_Vb.net - Fatal编程技术网

Sql server 存储过程输出参数返回空

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("

在我的SQL Server 2014中,我有一个存储过程,它返回2个变量中的2个值作为输出:

@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块保证在代码使用完一个或多个这样的资源后可以对它们进行处理。这使它们可供其他代码使用


添加参数时,需要指定参数的方向。默认值为输入。