界面上有四个控件,dateTimePickerStart, dateTimePickerTo,一个button,和一个textbox,现在要实现的是,对两个dateTimePicker控件选择了起始日期和截止日期后,对数据库中该日期段内的某一个字段进行求和,并返回这个和的值到textbox中,我的代码是:
string sql = "select sum(totalIncome)  from dailyIncome where dateDailyIncome between '" + this.dateTimePickerStart.Text.Trim() + "'and '" + this.dateTimePickerTo.Text.Trim() + "'";
SqlDataReader sdr = dataOperate.getRow(sql);
sdr.Read();
textBoxTotal.Text = sdr.ToString();
其中
public static SqlDataReader getRow(string sql)
        {
            SqlConnection con = createCon();
            con.Open();
            SqlCommand com = new SqlCommand(sql, con);
            return com.ExecuteReader
        }
为什么运行后总是显示错误:sum or average aggregate 运算不能以 varchar 数据类型作为参数。
请高人指点,谢谢!

解决方案 »

  1.   

    数据库中你的 totalIncome 是什么类型
      

  2.   

    select sum(cast(totalIncome as decimal)) 
      

  3.   

    如果是varchar的话可以先转化在计算sum(cast(isnull(totalIncome,'0') as decimal(18,2))
      

  4.   

    string sql = "select isnull(sum(cast(totalIncome as int)),0)  from dailyIncome where dateDailyIncome between '" + this.dateTimePickerStart.Text.Trim() + "'and '" + this.dateTimePickerTo.Text.Trim() + "'"; 
      

  5.   

    这样还是不行啊,提示错误:从字符串转换为 datetime 时发生语法错误。
      

  6.   

    那就没办法了 你的 totalIncome 是字符串 而且不能转为数字的话 能相加吗
      

  7.   

    你的totalIncome怎么定义成varchar类型呢?varchar类型怎么可能sum相加呢?“总收入”。你在数据库里应该把他定义成FLOAT型啊,
    你是不是在做记账系统?
      

  8.   

    string sql = "select isnull(sum(cast(totalIncome as decimal)),'0') as sum_all  from dailyIncome where dateDailyIncome between cast('" + this.dateTimePickerStart.Text.Trim() + "' as datetime) and cast('" + this.dateTimePickerTo.Text.Trim() + "' as datetime)"; SqlDataReader sdr = dataOperate.getRow(sql);
    sdr.Read();
    textBoxTotal.Text = sdr["sum_all"].ToString();这就对了,问题已解决,谢谢大家
      

  9.   

      求和还是把totalIncome改成 数字类型吧,你是要保存特定的格式么,你可以考虑用money型。