程序执行到最后一句中断,中断后ysu1.Value的值都已存在,出错提示:指定的转换无效。这到底是怎么回事啊!我看了2个小时都弄不明白,请帮帮我!
private float wwsu(int pi,string ban,float su)
  {
   SqlCommand myCommand = new SqlCommand("wwsu", myConn);
   myCommand.CommandType = CommandType.StoredProcedure;
   SqlParameter pi1 = new SqlParameter("@pi", SqlDbType.Int);
   pi1.Value = pi;
   myCommand.Parameters.Add(pi1);
   SqlParameter ban1= new SqlParameter("@ban", SqlDbType.VarChar,30);
   ban1.Value = ban;
   myCommand.Parameters.Add(ban1);
   SqlParameter su1= new SqlParameter("@su", SqlDbType.Float);
   su1.Value = su;
   myCommand.Parameters.Add(su1);
   SqlParameter ysu1= new SqlParameter("@ysu", SqlDbType.Float);
   ysu1.Direction = ParameterDirection.Output;
   myCommand.Parameters.Add(ysu1);
   myCommand.ExecuteNonQuery();
   return (float)ysu1.Value;
  }

解决方案 »

  1.   

    make sure the value is not DBNull.Value
      

  2.   

    对的,就是看你那个参数是不是DBNull.Value
      

  3.   

    参数不可能是DBNULL,我的存储过程中已设定,如空值就输出-1000
    create procedure wwsu (@pi int,@ban varchar(30),@su float,@ysu  float output)
    as 
    select @ysu=@su-未完数 from 结案未完数 where  批=@pi and 班=@ban
    select @ysu=isnull(@ysu,-1000)
    go
      

  4.   

    ysu1.Value;中断后的值都是正确的,但就是无法执行return (float)ysu1.Value,出错信息为:其它信息:指定的转换无效,难道从float转换成float都不行吗?真快晕死了!
      

  5.   

    make sure it is indeed float, tryysu1.Value.GetType().Name;or use Convert.ToSingle(...);
      

  6.   

    确认ysu1.Value类型
    用Convert指定转换
      

  7.   

    多谢saucer,用ysu1.Value.GetType().Name;得到类型是Decimal,全部改成Decimal就可以了。
      

  8.   

    可我明明把它第义为float,怎么c#自动转换为Decimal了。