存储过程返回小数问题
这是存储过程
CREATE PROCEDURE x_class
(
@area varchar(40),
@xqid int,
@xqid2 int,
@grade int,
@subject int,
@teacher int,
@classroom varchar(40)
)
AS
declare @sql nvarchar(2000)
declare @rece nvarchar(2000)
declare @rece22 nvarchar(2000)
declare @coun int
declare @coun2 int
declare @classlv numeric(16,2)
declare @sb int
select @sql='select @a=count(DISTINCT xjcode) FROM xueji_bmjf WHERE jxzq ='+cast(@xqid as varchar)
select @rece='select @b=count(DISTINCT xjcode) FROM xueji_bmjf WHERE jxzq ='+cast(@xqid2 as varchar)+' and xjcode in(select DISTINCT xjcode FROM xueji_bmjf
WHERE jxzq ='+cast(@xqid as varchar)+')'
if @area<>''
begin
set @sql=@sql+' and charindex('''+@area+''',xueji_bmjf.area)>0'
set @rece=@rece+' and charindex('''+@area+''',xueji_bmjf.area)>0'
end
if @grade<>0
begin
set @sql=@sql+' and xueji_bmjf.s_grade='+cast(@grade as varchar)
set @rece=@rece+' and xueji_bmjf.s_grade='+cast(@grade as varchar)
end
if @subject<>0
begin
set @sql=@sql+' and xueji_bmjf. jf_subject='+cast(@sb as varchar)
set @rece=@rece+' and xueji_bmjf. jf_subject='+cast(@sb as varchar)
end
if @teacher<>0
begin
set @sql=@sql+' and xueji_bmjf.teacher='+cast(@teacher as varchar)
set @rece=@rece+' and xueji_bmjf.teacher='+cast(@teacher as varchar)
end
if @classroom<>''
begin
set @sql=@sql+' and xueji_bmjf.classroom='''+@classroom+''''
set @rece=@rece+' and xueji_bmjf.classroom='''+@classroom+''''
end
--print @sql
--print @rece
exec sp_executesql @sql,N'@a int output',@coun output
exec sp_executesql @rece,N'@b int output',@coun2 output
set @classlv=convert(numeric(16,2),cast(@coun2 as float) /cast(@coun as float))
return @classlv
GO
这是返回函数
public decimal getReturnValue(string storedProcName, IDataParameter[] parameters)
{
SqlConnection conn;
conn = new SqlConnection(ConnStr);
conn.Open();
SqlCommand cmd = new SqlCommand(storedProcName, conn);
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
//cmd.Parameters[parameter].Direction = ParameterDirection.Input;
}
SqlParameter returnvalue = cmd.Parameters.Add("@returnvalue", SqlDbType.Decimal);
returnvalue.Direction = ParameterDirection.ReturnValue;
returnvalue.Precision = (byte)16;
returnvalue.Scale = (byte)2;
cmd.ExecuteNonQuery();
decimal fhvalue = Convert.ToDecimal(cmd.Parameters["@returnvalue"].Value);
return fhvalue;
}
我用 x_class '',42,43,0,0,0,''测试过能够返回小数
可是现在返回的值是0 请问高手这里应该怎样改呢