C# 在C中执行SQL Server存储过程时获取空值#

C# 在C中执行SQL Server存储过程时获取空值#,c#,sql-server,C#,Sql Server,我正在用C#执行一个SQL Server存储过程,但我的两个输出参数都返回为空。但是当我直接在SSMS中运行这个存储过程时,我会得到这两个参数的值。我使用了相同的输入订单号 有人能告诉我我的代码出了什么问题吗?多谢各位 using (SqlConnection con = new SqlConnection(CS)) { SqlCommand cmd = new SqlCommand("wt_find_open_pick_ticket_count", con); cmd.Comm

我正在用C#执行一个SQL Server存储过程,但我的两个输出参数都返回为空。但是当我直接在SSMS中运行这个存储过程时,我会得到这两个参数的值。我使用了相同的输入订单号

有人能告诉我我的代码出了什么问题吗?多谢各位

using (SqlConnection con = new SqlConnection(CS))
{
    SqlCommand cmd = new SqlCommand("wt_find_open_pick_ticket_count", con);
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@input_order_no", order_no);
    cmd.Parameters.Add("@status", SqlDbType.Int).Direction = ParameterDirection.Output;
    cmd.Parameters.Add("@results", SqlDbType.VarChar, 1000).Direction = ParameterDirection.Output;

    con.Open();
    cmd.ExecuteNonQuery();

    MessageBox.Show(cmd.Parameters["@status"].Value.ToString());
    MessageBox.Show(cmd.Parameters["@results"].Value.ToString());
}

ALTER procedure wt_find_open_pick_ticket_count
@input_order_no varchar(20),
@results varchar(1000) OUTPUT,
@status int OUTPUT

AS

SELECT
status = 
CASE
    WHEN COUNT(oe_pick_ticket.pick_ticket_no)>0 THEN 0
    ELSE 1
    END,
results = 

CASE
    WHEN COUNT(oe_pick_ticket.pick_ticket_no)> 0 THEN 'Message'
    ELSE ''
    END

    FROM oe_pick_ticket with (nolock)

    WHERE
    oe_pick_ticket.order_no = @input_order_no
    AND oe_pick_ticket.invoice_no IS NULL 
    AND oe_pick_ticket.delete_flag = 'N'
    AND oe_pick_ticket.print_date > '2014-01-01'


    GROUP BY oe_pick_ticket.order_no 

此存储过程返回一个结果集。它不返回输出参数。为了返回输出参数,SP必须更改为:

select
    @paramout1 = val1,
    @paramout2 = val2

请注意参数名称前面的“@”。

此存储过程返回一个结果集。它不返回输出参数。为了返回输出参数,SP必须更改为:

select
    @paramout1 = val1,
    @paramout2 = val2

请注意参数名称前面的“@”。

您能与我们共享您的存储过程吗?您的存储过程是SELECT吗?您有ExecuteOnQuery。我们需要查看您的SP,因为您的C#看起来很好。该过程从不为输出参数赋值,因此无论何时调用它,它们都将为null。老实说,您可以让.net以正常方式读取结果集。我不认为这里有任何输出参数的特殊需要。您希望这样做是有原因的吗?您可以与我们共享您的存储过程吗?您的存储过程是SELECT吗?您有ExecuteOnQuery。我们需要查看您的SP,因为您的C#看起来很好。该过程从不为输出参数赋值,因此无论何时调用它,它们都将为null。老实说,您可以让.net以正常方式读取结果集。我不认为这里有任何输出参数的特殊需要。您这样做有什么原因吗?使用@parameter后问题就解决了谢谢您的帮助Ravi,您介意将答案标记为已接受吗?我正在努力提高我的声誉。谢谢问题在使用@parameter后得到解决谢谢您的帮助Ravi,您介意将答案标记为已接受吗?我正在努力提高我的声誉。谢谢