string strsqlnum = "select sum(BalanceMoney) as TBalanceMoney from BookingMoney where F_ID=" + strid + "";
        SqlCommand cmd1 = new SqlCommand(strsqlnum, objconn);
        SqlDataReader sdr = cmd1.ExecuteReader();
        sdr.Read();
        int strcompare = Convert.ToInt32(sdr["TBalanceMoney"].ToString());        if (strcompare>0)
        {
            strcompare = Convert.ToInt32(sdr["TBalanceMoney"].ToString());
        }
        else {
            strcompare = 0;
        
        }红色部分,我这样转化总是有问题,在SQL数据库中BalanceMoney列是 numeric类型的,我统计数据,如果统计出来数据和strcompare进行比较,如果大于 0 将值赋值给strcompare,否则就是空数据或者小于0 的数据 赋值成0
新手,真是把我弄糊涂了

解决方案 »

  1.   

    你先保证你的那个字符串类型为int数值 如果你弄个"aaa"的字符串怎么转也转不成int类型的 呵呵 
      

  2.   

    BalanceMoney是有小数点的而不是整数,你不能用int红色部分换成这样
     decimal strcompare = Convert.ToDecimal(sdr["TBalanceMoney"]); 
    if (strcompare>0)
      

  3.   


      string strsqlnum = "select sum(BalanceMoney) as TBalanceMoney from BookingMoney where F_ID=" + strid + "";
      SqlCommand cmd1 = new SqlCommand(strsqlnum, objconn);
      SqlDataReader sdr = cmd1.ExecuteReader();
      sdr.Read();
      Decimal strcompare = Convert.ToDecimal(sdr["TBalanceMoney"]); 
      if (strcompare>0)
      {
        strcompare = Convert.ToDecimal(sdr["TBalanceMoney"]);
      }
      else 
     {
        strcompare = 0m;
        
      }
      

  4.   

    转换方法是对的,但是如果你的那个字符字段中取出来的值不是一个数字的话,比如包括字符或特殊字符的话,会报转型异常的。
     objconn.Open();
       string strsqlnum = "select sum(BalanceMoney) as TBalanceMoney from BookingMoney where F_ID=" + strid + "";
      SqlCommand cmd1 = new SqlCommand(strsqlnum, objconn);
      SqlDataReader sdr = cmd1.ExecuteReader();
      if(sdr.Read())
      {
          try
          {
               int strcompare = Convert.ToInt32(sdr["TBalanceMoney"].ToString()); 
               if (strcompare>0)
               {
                    strcompare = Convert.ToInt32(sdr["TBalanceMoney"].ToString());
               }
               else 
               {
                    strcompare = 0;
               }
            }
           catch(Exception ex)
           {
                // 如果是类型转换异常,输出报错异常
                 Response.Write(ex.Message);
           }
      }
      

  5.   

    楼主代码很罗嗦,直接这样不就行了吗
    Decimal strcompare;
     strcompare = Convert.ToDecimal(sdr["TBalanceMoney"])>0?Convert.ToDecimal(sdr["TBalanceMoney"]):0;  
      

  6.   


    decimal strcompare = Convert.ToDecimal(sdr["TBalanceMoney"]== null ? "0" : sdr["TBalanceMoney"]); 
      

  7.   

    不会出现空值,因为你用的sum这个统计函数,就算没有找到符合条件的记录行,返回的值也是0而不是空值
      

  8.   

    不可能存在空值,你不是用sum了吗,怎么还可能是空值。
      

  9.   

    所以这里不用那么麻烦
    直接decimal strcompare = Convert.ToDecimal(sdr["TBalanceMoney"])就可以了,后面的if都可以去了