问题描述:当搜索结果有数据的时候一切正常,当数据库里没搜索条件的数据的时候报错,附代码DataSet xfs = sqlhelper.ExecutDataset("select sum(sj) sj1,sum(lc) lc1 from  main where   datediff(d,date,'" + hf1.Value + "')<=0 and datediff(d,date,'" + hf2.Value + "')>=0");
        if (xfs != null && xfs.Tables[0].Rows.Count > 0)
        {
            DataTable dt = xfs.Tables[0];
            DataRow dr=xfs.Tables[0].Rows[0];
            sjxfs = Convert.ToDecimal(dr["sj1"].ToString());
            lcxfs = Convert.ToDecimal(dr["lc1"].ToString());            list1.DataSource = dt;
            list1.DataBind();
        }异常详细信息: System.FormatException: 输入字符串的格式不正确。源错误: 
行 74:             DataTable dt = xfs.Tables[0];
行 75:             DataRow dr=xfs.Tables[0].Rows[0];
行 76:             sjxfs = Convert.ToDecimal(dr["sj1"].ToString());76行出错,数据库里数据都是float类型的,求解决办法

解决方案 »

  1.   

    版主大大,我新手,不太会调试,是在SQL里面调试还是VS里?
      

  2.   

    可是有数据的时候都正常的呢
    你把出错时候的SQL语句拿出来放SQL管理器里执行一下不就知道了……
      

  3.   

    可是有数据的时候都正常的呢
    你把出错时候的SQL语句拿出来放SQL管理器里执行一下不就知道了……
    OK,我每天试下,多谢
      

  4.   

    Convert.ToDecimal(dr["sj1"].ToString()
    你把dbnull转换成数字当然要出错了
      

  5.   

    读取之前先判断一下dr["sj1"]是不是dbnull
      

  6.   

    好像是这样,在SQL管理器里查询是好的,没数据出来NULL,应该是Convert.ToDecimal(dr["sj1"].ToString()的问题,该怎么改啊?
      

  7.   

    if (xfs != null && xfs.Tables[0].Rows.Count > 0)  这个不是已经判断是否有数据了吗?
      

  8.   

    好像是这样,在SQL管理器里查询是好的,没数据出来NULL,应该是Convert.ToDecimal(dr["sj1"].ToString()的问题,该怎么改啊?
    数据库都没查出来,为null,Convert.ToDecimal(dr["sj1"].ToString()转换当然报错哦,
    你确定这样写sql语句,是没得数据??还是你的sql有问题,即使查出来为空,你也应该改判断
    if(为空)
    {
      model中这个sj1字段赋值为0
    }
      

  9.   

    sjxfs =(dr["sj1"]+"")!=""? Convert.ToDecimal(dr["sj1"].ToString()):dr["sj1"]+"";  
    很简单,这样修改就没有问题了。记得全部给分我。
      

  10.   

    好像是这样,在SQL管理器里查询是好的,没数据出来NULL,应该是Convert.ToDecimal(dr["sj1"].ToString()的问题,该怎么改啊?
    if(dr.IsNull("sj1"))
    {
    为空时
    }
    else
    {
    convert
    }
      

  11.   

    convert.ToDBNull判断是否是DBNull类型 
      

  12.   

    if (xfs != null && xfs.Tables[0].Rows.Count > 0)  这个不是已经判断是否有数据了吗?这只是有行,不一定每行每列都有数据
      

  13.   

    //如果你数据库内没有数据时读到的数据是dbnull,这时你不能把dbnull强转成其他类型,所以你要判断是否为dbnull
    if(!dr["sj1"].DBNull)
    {}
      

  14.   

    应该不是查询语句的错误了,因为你说的可以查询出数据就没有问题,如果没有数据就会出问题,没有数据你的DataSet为null,然后获得其中的单元格当然就会出问题,你在使用Dataset的时候先判断是否为null
      

  15.   

    数据库里数据都是float类型的,那就是NULL问题了。
      

  16.   

    sjxfs = Convert.ToDecimal(dr["sj1"].ToString());不要用Convert.ToDecimal,
    改用
    decimal num=0;
    decimal.TryParse(dr["sj1"].ToString(),out num);
    sjxfs=num;
      

  17.   

    谢谢大家,解决了,是因为没判断Null造成的,呵呵
      

  18.   

    我现在看到sql还是加号的 我就有种强迫症的感觉