对不起,刚起步学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的值为一个时间控件的值。现在就是只能提取出来一个月的数据,请指教
你用来存数据的 DataSet 老是在替换新数据啊
你那里面的for循环做什么的啊
你循环3次 你用来存数据 DATASET 有在循环中 当然是最后一条数据啊
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的有问题,这样的的话会不会是你最后一笔数据把前面的数据全都覆盖了
------------------------------------ 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得到一些数据存入一些文件中调试即可.
select top 1 * 这个是只显示一条记录order by time desc 这个是 依照tim 逆序输出 也就是 时间靠后的排在前面
【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; }
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里面
请问楼上,group by time 前有个a ,是做什么的
。 a前面括号里的select语句查出来的另当做一个表,表名a...
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; }
就像楼上所说的 查询出来的数据是不可能少掉的,只可能是本来你就只查询出来一条数据
不建议那么循环开数据库,最好能组织好SQL语句一次那出来,实在不行的话,用数据集的add方法往里面添加每次查出来的对象
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的值为一个时间控件的值。现在就是只能提取出来一个月的数据,请指教
这有一个参数i应该跟你的for里面i的有问题,这样的的话会不会是你最后一笔数据把前面的数据全都覆盖了
用个数组存你的DATASET 就是说循环一次存一次 你这个数组声明要放在循环外面 ,在你产生一个DATASET 后 吧DATASET存到组数中。 我就不代码给你了。
感觉你是个刚刚学习程序的新人。要多想想。这是个小问题
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得到一些数据存入一些文件中调试即可.
这个是只显示一条记录order by time desc
这个是 依照tim 逆序输出 也就是 时间靠后的排在前面
每一次for循环在dt=ds.Tables["useall"]; 这一句这里,就对dt的值进行修改,注意是修改dt的值啊,不是添加值到里面啊,我觉得你应该是想表达添加一个记录到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;
}
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里面
a前面括号里的select语句查出来的另当做一个表,表名a...
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;
}