C# 存储过程将null作为输出参数返回

C# 存储过程将null作为输出参数返回,c#,sql,stored-procedures,C#,Sql,Stored Procedures,我有存储过程,它在MS SQL management studio中非常有效 当我尝试在VS行中使用它时,返回的结果很好,但输出参数的值是NULL SqlCommand cmd=newsqlcommand(“proc_name”,conn); cmd.CommandType=CommandType.storedProcess; Add(新的SqlParameter(“@p_SomeVal”,SqlDbType.Int)); cmd.Parameters[“@p_SomeVal”].Directi

我有
存储过程
,它在MS SQL management studio中非常有效

当我尝试在VS行中使用它时,返回的结果很好,但输出参数的值是NULL

SqlCommand cmd=newsqlcommand(“proc_name”,conn);
cmd.CommandType=CommandType.storedProcess;
Add(新的SqlParameter(“@p_SomeVal”,SqlDbType.Int));
cmd.Parameters[“@p_SomeVal”].Direction=ParameterDirection.Output;
rdr=cmd.ExecuteReader();
//…处理行。。。
if(cmd.Parameters[“@p_SomeVal”].Value!=null)
SomeVal=(int)cmd.Parameters[“@p_SomeVal”].Value;
cmd.ExecuteNonQuery();结果是一样的

USE [db_name]
GO

DECLARE @return_value int,
    @p_SomeValue int

EXEC    @return_value = [dbo].[Proc_name]
    @p_InputVal = N'aa',
    @p_SomeValue = @p_SomeValue OUTPUT

SELECT  @p_SomeValue as N'p_SomeValue'

SELECT  'Return Value' = @return_value

GO
在处理行之后,我添加了
rdr.Close(),工作正常。

萨拉姆, 您可以检查输出是否为null,并像这样进行转换

returnedSQLParameter.Value != DBNull.Value? (int)returnedSQLParameter.Value : 0;

因为当从存储过程发送输出时,它返回
DBNull.value

该过程是什么样子的?您是否在VS和SSMS中的同一数据库中运行它?@Oded yes DB是相同的。参数是相同的。顺便说一句,您应该针对
DBNull.Value
,而不是
null
。@Oded也用同样的运气测试了一下连接字符串。我怀疑您在不同的数据库上(可能在同一台服务器上)@Oded解决方案很简单:(或者如果您喜欢一行程序,您可以执行var SomeVal=command.Parameters[“@p_SomeVal”].Value!=null?(int)command.Parameters[“@p_SomeVal”]。Value:default(int);对不起,我太仓促了…null和DBNull…您必须在这里使用var SomeVal=command.Parameters[“@p_SomeVal”]”。Value是DBNull?默认值(int):(int)command.Parameters[“@p_SomeVal”]”。Value;
returnedSQLParameter.Value != DBNull.Value? (int)returnedSQLParameter.Value : 0;