winform程序
有三张表,简单说明如下(Access数据库)
表A(机器)
字段: id  区域
表B(区域)
字段:id  性质
表C(负责人)
字段:id  名称
实际上的情况要比这个复杂一点,为了说明问题我简化了一下
每个表的id字段都是各自的主键,我需要做的是在datagridview中将机器id,所属区域,所属区域的负责人显示出来,如果仅仅是这样就好办了,比较麻烦的是表A中的机器可能不属于任何区域(此时区域字段用0填充),也可能属于好几个区域(用,隔开区域id,比如1,2,3),而表B中区域字段可能是空的或者是表c中id字段中的一个值(只有一个)表A
id   区域
1     0
2     1,2
3     3
4     1,3表B
id   性质
1     1
2     2
3     表C
id    负责人
1      张三
2      李四显示如下
    id    所属区域    负责人
    1       0          无
    2      1,2       张三,李四
    3       3        该区域未指定负责人
    4      1,3      张三,该区域未指定负责人我原来的查询方式是遍历表A,如果其所属区域为0则设置变量值为“无”,否则用变量记录所属区域的值,然后用split分开,分别查询该区域id在表b中对应的性质,如果性质为空则设置变量为“该区域未指定负责人”,将所属的每个区域的负责人名称组合到变量中sql语句如下(程序中字段名为英文,此处为了说明方便写成中文)
 sqlQuery = "select id ,区域 from 表A";
 ds = DataAccess.GetDataSet(sqlQuery, "表A");
 for (int dscount = 0; dscount < ds.Tables[0].Rows.Count; dscount++)
{
   str = "";
if (ds.Tables[0].Rows[dscount][1].ToString() != "0")//该机器有所属区域
{
     idarea = ds.Tables[0].Rows[dscount][1].ToString().Split(',');
          for (int i = 0; i < idarea .Length; i++)
            {
             sql = "select id from 表B where id=" + idarea [i] + "";
                if (DataAccess.QueryData(sql) != "")//该区域有负责人
                {
                sql = "select 负责人 from 表C where id =(select 性质 from 表B where id=" + idarea [i] + ")";
                ds2 = DataAccess.GetDataSet(sql, "表B", "表C");
                if (ds2.Tables[0].Rows.Count > 0)
                {
                 gname = ds2.Tables[0].Rows[0][0].ToString();//区域对应的负责人
                   if (idcom == "")
                   {
                     idcom = gname ;
                   }
                   else
                  {
                     idcom = idcom + "," + gname ;
                  }
                }
             }
      }
}
str=ds.Tables[0].Rows[dscount][0].ToString() + " " + ds.Tables[0].Rows[dscount][1].ToString() + " " + idcom;将组合好的数据添加到界面表格上
 string[] row = str.Split(' ');
 rows.Add(row);//在界面上添加一行数据
本来是这样直接添加到界面上的,可执行速度太慢,界面象死机一样,然后一下将所有数据一起显示出来。现在改用线程方式,可以一行一行显示,但总体执行时间还是比较长,200多条数据竟然用了50多秒,机器配置不怎么样,内存只有256,但我觉得我的sql语句写的还是有问题的,这样频繁的访问数据库效率肯定低,想请教各位如何能优化这段代码?
}