日期:2014-05-20  浏览次数:21284 次

sql+mysql+chart+DataTable实现折线图分享!
数据库字段
username number datastar dataend
下面我把我做的完整代码奉上!功能如下
按照姓名求出当年的每个月的,每周的,前一个月的使用流量和用折线图表示出来!

每个月的就是重2012-01-01开始到今天(按照月为单位 yyyy-MM)sum(number)group by 时间就可以了
这里的时间要把 天 时 分 秒 去掉!
因为group by 时间的时候!比如2012-12-12 12:12:12, 2012-12-13 12:13:12  
这样分组的话2012-12这天会有不止一条记录,我们要求的是2012-12这月所有的sum!
DATE_FORMAT(datastar , '%Y-%m)my_month  
这件话就是把 天 时 分 秒 取掉了 查出来只显示 2012-12 那么我们这个时候在group by 时间 再sum一下就把这一月的和求出来了!

每周的按照周为单位 一共显示2012-01-01到今天的全部周数 求周数的sum放到chart上
前一个月的 按照天数为单位 31条记录(yyyy-MM-dd)
这个功能现在已经完善了!

 返回的是databable 如果
 DbStatement db = dbc.DbSessionOwa.GetStatement(sql);
  return dbc.DbSessionOwa.ExecuteDataTable(db);
这两句话里面的类我没写,反正返回的databable 都知道怎么返回的,所以这两句话你们可以用你们的方法返回datatable!
 

//每天
  public static DataTable SelectDay(string name, string type, string star, string end)
  {
  string sql = string.Format("SELECT round(sum(size/1000/1024),2)sums,DATE_FORMAT(date, '%Y-%m-%d')my_month from owa_isa where username='{0}' and client='{1}' and date between '{2}' and '{3}' GROUP BY my_month", name,type, star,end);
  DbStatement db = dbc.DbSessionOwa.GetStatement(sql);
  return dbc.DbSessionOwa.ExecuteDataTable(db);
   
  }
  //每周
  public static DataTable SelectWeek(string name, string type, string star, string end)
  {
  string sql = string.Format("SELECT round(sum(size/1000/1024),2)sums,week(date,1)my_month from owa_isa where username='{0}' and client='{1}' and date between '{2}' and '{3}' GROUP BY my_month", name, type, star, end);
  DbStatement db = dbc.DbSessionOwa.GetStatement(sql);
  return dbc.DbSessionOwa.ExecuteDataTable(db);
  }
  //每月
  public static DataTable SelectMonth(string name, string type, string star, string end)
  {
  string sql = string.Format("SELECT round(sum(size/1000/1024),2)sums,DATE_FORMAT(date, '%Y-%m')my_month from owa_isa where username='{0}' and client='{1}' and date between '{2}' and '{3}' GROUP BY my_month", name, type, star, end);
  DbStatement db = dbc.DbSessionOwa.GetStatement(sql);
  return dbc.DbSessionOwa.ExecuteDataTable(db);
  }

其实上头让我怎么做的,哎 这要三个方法,其实如果在表示层传sql语句那这个数据访问层也就只要一个方法就行了!上头说表示层不能有sql语句也只能怎么写了!
大家看到就sql语句不一样!其实这个功能就sql语句有含金量!
上面的mqsql数据库
一下是sql数据库的
我就只写sql语句了 方法都同上

日期相关的
得到每周 select sum(使用流量的和),datepart(week,时间字段)as t from Statistical where 1=1 group by datepart

去掉时 分 秒 select时间字段 = convert(varchar(10),时间字段,120) from Statistical

下面是显示页面的代码 业务层我就不写了,直接调用数据访问层也行


 OwaManagers owam = apc.GetManager<OwaManagers>();//业务层
  DataTable dt = default(DataTable);
load方法(){
string name = Request.QueryString["username"];

  string type = Request.QueryString["client"];
  DateTime dt = DateTime.Now;
  DateTime lastDay = dt.AddDays(-1).Date;//前一天事时间 adddays()里面放的是返回的日期 负往前 正往后
  DateTime pre30Day = dt.AddDays(-31).Date;//前一个月时间
  DateTime sameDays = dt.AddDays(0).Date;//当天时间
  string myear = dt.Year.ToString();//年

  string first_day = myear + "-01-01";//年的首月首日
  string star = pre30Day.ToString();//开始时间
  string end = sameDays.ToString();//当前时间
  week(name,type,first_day,end);

}
 //每周的
  private void week(string name, string type, string star, string end)
  {
  DataTable dt = NewMethod();