我用access建了个表report,数据项有ID(自动编号),number(数字),time(时间)。现在我想要的是:按提取时间里的月份聚集,计算每月number的总数、显示月份、同月份的数据的条数。
我的代码是:
 private DataSet ExecuteAccessNonQuery()
        {
            string ACCESS_CONN_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\data.mdb;";            OleDbConnection conn = new OleDbConnection(ACCESS_CONN_STRING);
            //按提取时间里的月份,然后按月份聚集,计算每月number的总数、显示月份、每个月的条数
            OleDbCommand cmd = new OleDbCommand("select sum(number) as 'sum' ,datepart(mm,time) as 'month' count(*) as 'count' from report group by  datepart(mm,time) ", conn);            cmd.CommandType = CommandType.Text;            try
            {
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);                DataSet ds = new DataSet();                da.Fill(ds);
                return ds;            }
            catch
            {
                conn.Close();
                throw;
            }
        }
运行后出错:SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。

解决方案 »

  1.   

    datepart(mm,time) as 'month' count(*) as 'count',两列中间少个逗号
      

  2.   

    time和count都是保留字 用的时候加上中括号 还有给字段取别名的时候 不需要加双引号"select sum(number) as sum ,datepart(mm,[time]) as month count(*) as 记录条数 from report group by  datepart(mm,[time])"
      

  3.   

    对  我还没注意  查询的字段  中间少逗号了
    "select sum(number) as sum ,datepart(mm,[time]) as month,count(*) as 记录条数 from report group by  datepart(mm,[time])"
      

  4.   

    按楼上修改后:OleDbCommand cmd = new OleDbCommand("select sum(number) as sum ,datepart(mm,[time]) as month , count(*) as 记录条数 from report group by  datepart(mm,[time])", conn);
    运行后:SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。
      

  5.   

    我日 你这语句里头用的关键字太多了啊
    "select sum(number) as 总数 ,datepart(mm,[time]) as 月份,count(*) as 记录条数 from report group by  datepart(mm,[time])"
    试试这个吧
     
     
     
      

  6.   

    OleDbCommand cmd = new OleDbCommand("select sum(number) as 总数 ,datepart(mm,[time]) as 月份,count(*) as 记录条数 from report group by  datepart(mm,[time])", conn);
    运行后出现:至少一个参数没有被指定值。
      

  7.   

    在上面conn初始化以后try一下conn.Open()
      

  8.   

    不是这个地方出错,我如果把语句改成其他的比如:select * from report 就行了,所以说是那句sql语句的问题
      

  9.   

    if exists (select * from sys.objects where object_id=object_id('report') and type='u')
    drop table report
    create table report(time datetime,number int)
    insert into report(time,number)values(getdate(),12)
    insert into report(time,number)values(getdate(),123)
    insert into report(time,number)values(datediff(dd,30,getdate()),11)
    insert into report(time,number)values(datediff(dd,30,getdate()),21)select sum(number) as 总数 ,datepart(mm,[time]) as 月份,count(*) as 记录条数 from report group by  datepart(mm,[time])总数    月份     记录条数
    32 4 2
    135 5 2
      

  10.   

    select sum(number) as 总数 ,datepart(mm,[time]) as 月份,count(*) as 记录条数 from report group by  datepart(mm,[time])放到数据库里执行时可以的,但不知道为什么,在C#里,就不行,会出问题