来一个直观的思路吧。 1.通过Select distinct 点号from 交叉表数据库 这个SQL得到一个DataTable,命名为dt点号 2.通过Select distinct 周期,日期 from 交叉表数据库 这个SQL得到一个DataTable,命名为dt周期日期 3.循环判断是否存在。 for each drw点号 in dt点号.rows() for each drw周期日期 in dt周期日期.rows() if (select * from 交叉表数据库 where 点号=drw点号("点号") and 周期=drw周期日期("周期") and 日期=drw周期日期("日期")) 能取得数据 then 这个交叉项不是空,做你的处理吧。 else 这个交叉项是空,做你的处理吧。 end if next for next for大体上就是类似于上面的样子。在实际实现的时候,不要在循环里面写SQL文,因为那样做的话,访问数据库的次数过多。 可以先把交叉表数据库中需要的数据取出来形成一个数据集,然后把 步骤1,2,3中的SQL文都改成对内存中的数据集的操作。
dt一开始数据从哪里来,自己写吧
然后是加一行:datarow dr=dt.newrow();
dr[0]=
dr[1]=
dt.rows.add(dr)
添加row,然后为cell赋值
1.通过Select distinct 点号from 交叉表数据库 这个SQL得到一个DataTable,命名为dt点号
2.通过Select distinct 周期,日期 from 交叉表数据库 这个SQL得到一个DataTable,命名为dt周期日期
3.循环判断是否存在。
for each drw点号 in dt点号.rows()
for each drw周期日期 in dt周期日期.rows()
if (select * from 交叉表数据库 where 点号=drw点号("点号") and 周期=drw周期日期("周期") and 日期=drw周期日期("日期")) 能取得数据 then
这个交叉项不是空,做你的处理吧。
else
这个交叉项是空,做你的处理吧。
end if
next for
next for大体上就是类似于上面的样子。在实际实现的时候,不要在循环里面写SQL文,因为那样做的话,访问数据库的次数过多。
可以先把交叉表数据库中需要的数据取出来形成一个数据集,然后把 步骤1,2,3中的SQL文都改成对内存中的数据集的操作。
我写了函数
private void SelectDistinct(DataSet ds, OleDbConnection dbConn, string strTableName)
{
string strSql1 = "select distinct 点号 from " + strTableName;
OleDbDataAdapter dbda1 = new OleDbDataAdapter(strSql1, dbConn);
dbda1.Fill(ds.Tables["DataTable_DistinctPoint"]); string strSql2 = "select distinct 周期,日期 from " + strTableName;
OleDbDataAdapter dbda2 = new OleDbDataAdapter(strSql2, dbConn);
dbda2.Fill(ds.Tables["DataTable_DistinctPeriodDate"]);
}下面的不会了,请大神指教