日期:2014-05-18  浏览次数:20671 次

mssql 变量之间的传值
存储过程:
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 @RetStr

C# 代码:
  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#程序中传同样的值进去,返回的值却为空,请问是怎么回事呢?

------解决方案--------------------
少一个参数吧
------解决方案--------------------
@ret参数呢?
------解决方案--------------------
可以这样写的,在mssql手动输入参数是可以的吧

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

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