C# 在C中执行SQL Server存储过程时获取空值#
我正在用C#执行一个SQL Server存储过程,但我的两个输出参数都返回为空。但是当我直接在SSMS中运行这个存储过程时,我会得到这两个参数的值。我使用了相同的输入订单号 有人能告诉我我的代码出了什么问题吗?多谢各位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
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,您介意将答案标记为已接受吗?我正在努力提高我的声誉。谢谢