存储过程:
CREATE procedure [dbo].[OneGoods]
@year  char(4)='',
@goods nvarchar(100)='',
@ageid varchar(10)='',
@ret  int=0 output,
@RetStr nvarchar(500)='' output
as
  DECLARE @getcount int
  declare @temp   varchar(10)
  set @getcount=0
  select @getcount= sum([count]) from outlog where date like (@year+'-11%') and goodsinfo =@goods and ageid=@ageid
  if(@getcount is null)
  begin
     set @temp=@RetStr+'*0'
     set @RetStr=@temp
  end
  else
  begin
     set @temp=@RetStr+'*'+CONVERT (nvarchar(100),@getcount )
     set @RetStr=@temp
  end
print @RetStrC# 代码:
                    Comm.CommandText = "[OneGoods]";
                    Comm.CommandType = CommandType.StoredProcedure;
                    Comm.Parameters.AddWithValue("@year", in_Year.Trim());
                    Comm.Parameters.AddWithValue("@goods", in_Goods.Trim());
                    Comm.Parameters.AddWithValue("@ageid", Session["LoginAccount"].ToString().Trim());
                    Comm.Parameters.Add(new SqlParameter("@RetStr", SqlDbType.NVarChar, 500));
                    Comm.Parameters["@RetStr"].Direction = ParameterDirection.Output;
                    Comm.ExecuteNonQuery();
                    Tempstr = Comm.Parameters["@RetStr"].Value.ToString();
在mssql控制面板里传入参数执行后 输出的有值
但是在C#程序中传同样的值进去,返回的值却为空,请问是怎么回事呢?

解决方案 »

  1.   

    我把@ret参数去掉了 还是不行
    是不是 这种参数之前传值 不能这么写啊( set @temp=@RetStr+'*'+CONVERT (nvarchar(100),@getcount ))
      

  2.   

    可以这样写的,在mssql手动输入参数是可以的吧
      

  3.   

    你这样试试,把SP里的参数赋一个定值返回,看能不能在前端得到,若能,则改SP;若不能则改前端C#。
      

  4.   

    结此贴,原因是由于两个变量在组合时,有一个参数为null,因此在需判断这两个变量是不是其中一个为null.如果一个为null,则两个组合后也是null.