从sql数据表中按月提取出一条记录,用listview显示,现在只显示出来满足条件的最后一条记录,不知道为什么。

解决方案 »

  1.   

    你先查拿出来的数据集里有多少记录,数据集绑定到datasource时不会少掉的
      

  2.   

    你先查看下sql条件啊,有可能是你按月条件写得不够正确啊,
      就像楼上所说的  查询出来的数据是不可能少掉的,只可能是本来你就只查询出来一条数据
      

  3.   

    现在就是这里出了问题,在数据库查询这里加了个循环,能每月取一条记录,现在datatable里只有最后一条查询记录。感觉是每次都把前一次查询出来的记录给冲了!
      

  4.   

    在数据库查询这里加了个循环....
    不建议那么循环开数据库,最好能组织好SQL语句一次那出来,实在不行的话,用数据集的add方法往里面添加每次查出来的对象
      

  5.   

    有什么好办法吗?想从表里面面按月提取一条数据出来。。不是存入datatable表里的问题!
      

  6.   

    对不起,刚起步学c#。。我是这样写的数据查询部分
    public DataTable GetUseAllDatas(string Name,string Year)
         {
    //string dts=Year+"-1-1 00:00:00";
    //string dte=Year+"-12-31 23:59:59";
    string dts=Year;
    for(int i=1;i<=3;i++)
    {
    str=string.Format("select top 1 * from waterDatasMonth where Name='{0}'and year(time)='{1}' and month(time)='{2}'order by time desc",Name,dts,i);
    da=new SqlDataAdapter(str,con.GetConnection());
    DataSet ds=new DataSet();
    da.Fill(ds,"useall");
    dt=ds.Tables["useall"];
    da.Dispose();

    }
    return dt;

    }
    其中dts的值为一个时间控件的值。现在就是只能提取出来一个月的数据,请指教
      

  7.   

    你用来存数据的 DataSet 老是在替换新数据啊
      

  8.   

    你那里面的for循环做什么的啊
      

  9.   

    你循环3次 你用来存数据 DATASET 有在循环中 当然是最后一条数据啊
      

  10.   

    str=string.Format("select top 1 * from waterDatasMonth where Name='{0}'and year(time)='{1}' and month(time)='{2}'order by time desc",Name,dts,i);
    这有一个参数i应该跟你的for里面i的有问题,这样的的话会不会是你最后一笔数据把前面的数据全都覆盖了 
      

  11.   

    for循环我的初衷是想提取3个月的数据,,,所以现在不成功!
      

  12.   

    应该是在Fill时将上条数据冲掉了
      

  13.   

    告诉你个 不考录 内存的方法 
       
        用个数组存你的DATASET 就是说循环一次存一次 你这个数组声明要放在循环外面 ,在你产生一个DATASET 后 吧DATASET存到组数中。  我就不代码给你了。
     感觉你是个刚刚学习程序的新人。要多想想。这是个小问题
      

  14.   

    DataSet ds=new DataSet();//把这个放到for外面
      

  15.   

    ------------------------------------
    str=string.Format("select top 1 * from waterDatasMonth where Name='{0}'and year(time)='{1}' and month(time)='{2}'order by time desc",Name,dts,i); 
    MessageBox.Show( str);
    查看一下字符串,
    然后加一些messagebox得到一些数据存入一些文件中调试即可.
      

  16.   

    select top 1 *
    这个是只显示一条记录order by time desc
    这个是 依照tim 逆序输出  也就是 时间靠后的排在前面 
      

  17.   

    这个必须错的呀!!!
    每一次for循环在dt=ds.Tables["useall"]; 这一句这里,就对dt的值进行修改,注意是修改dt的值啊,不是添加值到里面啊,我觉得你应该是想表达添加一个记录到dt对象里面吧,那不是这样写的。
      

  18.   

    jianuMan有什么好办法吗?谢谢!
      

  19.   

    【amwsse21q】这同学说的对,你的确实是一直在用for来改变dt的数据而已。参考代码应该可以如下(没有调试,你自己去试试吧):
    public DataTable GetUseAllDatas(string Name, string Year)
    {
        //string dts=Year+"-1-1 00:00:00";
        //string dte=Year+"-12-31 23:59:59";
        string dts = Year;    DataSet ds = new DataSet();    DataTable dt = new DataTable();    for (int i = 1; i <= 3; i++)
        {
            string selectString = "select top 1 * from waterDatasMonth"
                + " where Name='{0}'and year(time)='{1}' and month(time)='{2}'"
                + "order by time desc";        str = string.Format(selectString, Name, dts, i);        da = new SqlDataAdapter(str, con.GetConnection());        da.Fill(ds);        DataRow row = ds.Tables[0].Rows[0];        dt.Rows.Add(row);        da.Dispose();
        }
        return dt;
    }
      

  20.   

    use northwind
    goselect * from orders
    where shippedDate in 
    (
    select max(shippeddate) from 
    (
    select *, cast(datepart(year, ShippedDate) as varchar(100)) + '-' +  cast(DatePart(month, ShippedDate) as varchar(100)) as time
    from orders
    ) a 
    group by time
    )参考这个  每个月显示一条数据 
    然后你把从DataTable的值 添加到ListView里面
      

  21.   

    请问楼上,group by time 前有个a ,是做什么的
      

  22.   


    a前面括号里的select语句查出来的另当做一个表,表名a...
      

  23.   


    public DataTable GetUseAllData(string name, string year)
    {  DataSet ds = new DataSet();  DataTable dt = new DataTable();  for (int i = 1; i <= 3; i++)
      {
          string selectString = "select top 1 * from waterDatasMonth"
          + " where Name='{0}'and year(time)='{1}' and month(time)='{2}'"
          + "order by time desc";
          str = string.Format(selectString, name, year, i);
          da = new SqlDataAdapter(str, con.GetConnection());
          da.Fill(ds);
          DataRow dr = dt.NewRow();
          DataRow row = ds.Tables[0].Rows[0];
          dr.ItemArray = row.ItemArray; 
          dt.Rows.Add(dr);
          da.Dispose();
      }
      return dt;
    }
      

  24.   

    34楼,我试了下,这个已经非常贴切,但还是有些问题,报“输入数组长度大于此表中的列数”错误一想,是dt还需要有表结构。我在循环外面加了dt的表结构,就实现按月提取一条记录的功能了。所以还是要谢谢xz_lm_fly(飞浪),也谢谢大家!