public void tvShow(TreeView TreeView1)
{
conn0.Open();
SqlCommand cmd0 = new SqlCommand("select hr_CompanyID,hr_CompanyEngName from t_hr_Company", conn0);
SqlDataReader dr0 = cmd0.ExecuteReader(); while (dr0.Read())
{
TreeNode childnode0 = new TreeNode(dr0["hr_CompanyEngName"].ToString(), dr0["hr_CompanyID"].ToString());
childnode0.SelectAction = TreeNodeSelectAction.None;
childnode0.NavigateUrl = "javascript:;";
TreeView1.Nodes.Add(childnode0); conn.Open();
SqlCommand cmd = new SqlCommand("select hr_DepartmentID,hr_DepartmentEngName from t_hr_Department where hr_CompanyID = '" + childnode0.Value.Trim() + "'", conn);
SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read())
{
TreeNode childnode = new TreeNode(dr["hr_DepartmentEngName"].ToString(), dr["hr_DepartmentID"].ToString());
childnode.SelectAction = TreeNodeSelectAction.None;
childnode0.ChildNodes.Add(childnode); conn2.Open();
SqlCommand cmd2 = new SqlCommand("select hr_TeamID,hr_TeamName from t_hr_Team where hr_DepartmentID = '" + childnode.Value.Trim() + "'", conn2);
SqlDataReader dr2 = cmd2.ExecuteReader();
while (dr2.Read())
{
TreeNode childnode2 = new TreeNode(dr2["hr_TeamName"].ToString(), dr2["hr_TeamID"].ToString());
childnode2.SelectAction = TreeNodeSelectAction.None;
childnode.ChildNodes.Add(childnode2); conn3.Open();
SqlCommand cmd3 = new SqlCommand("select b.hr_EmployeeID,b.hr_EngName from t_hr_PromotionHistory a,t_hr_Employee b where a.hr_EmployeeID=b.hr_EmployeeID and a.hr_TeamID = '" + childnode2.Value.Trim() + "'", conn3);
SqlDataReader dr3 = cmd3.ExecuteReader();
while (dr3.Read())
{
TreeNode childnode3 = new TreeNode(dr3["hr_EngName"].ToString(), dr3["hr_EmployeeID"].ToString());
childnode3.ToolTip = dr3["hr_EmployeeID"].ToString();
childnode3.SelectAction = TreeNodeSelectAction.Expand;
childnode2.ChildNodes.Add(childnode3);
}
dr3.Close();
conn3.Close();
}
dr2.Close();
conn2.Close();
}
dr.Close();
conn.Close();
}
dr0.Close();
conn0.Close();
}
这样太慢了,300来个人快死掉了,怎么办啊?
{
conn0.Open();
SqlCommand cmd0 = new SqlCommand("select hr_CompanyID,hr_CompanyEngName from t_hr_Company", conn0);
SqlDataReader dr0 = cmd0.ExecuteReader(); while (dr0.Read())
{
TreeNode childnode0 = new TreeNode(dr0["hr_CompanyEngName"].ToString(), dr0["hr_CompanyID"].ToString());
childnode0.SelectAction = TreeNodeSelectAction.None;
childnode0.NavigateUrl = "javascript:;";
TreeView1.Nodes.Add(childnode0); conn.Open();
SqlCommand cmd = new SqlCommand("select hr_DepartmentID,hr_DepartmentEngName from t_hr_Department where hr_CompanyID = '" + childnode0.Value.Trim() + "'", conn);
SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read())
{
TreeNode childnode = new TreeNode(dr["hr_DepartmentEngName"].ToString(), dr["hr_DepartmentID"].ToString());
childnode.SelectAction = TreeNodeSelectAction.None;
childnode0.ChildNodes.Add(childnode); conn2.Open();
SqlCommand cmd2 = new SqlCommand("select hr_TeamID,hr_TeamName from t_hr_Team where hr_DepartmentID = '" + childnode.Value.Trim() + "'", conn2);
SqlDataReader dr2 = cmd2.ExecuteReader();
while (dr2.Read())
{
TreeNode childnode2 = new TreeNode(dr2["hr_TeamName"].ToString(), dr2["hr_TeamID"].ToString());
childnode2.SelectAction = TreeNodeSelectAction.None;
childnode.ChildNodes.Add(childnode2); conn3.Open();
SqlCommand cmd3 = new SqlCommand("select b.hr_EmployeeID,b.hr_EngName from t_hr_PromotionHistory a,t_hr_Employee b where a.hr_EmployeeID=b.hr_EmployeeID and a.hr_TeamID = '" + childnode2.Value.Trim() + "'", conn3);
SqlDataReader dr3 = cmd3.ExecuteReader();
while (dr3.Read())
{
TreeNode childnode3 = new TreeNode(dr3["hr_EngName"].ToString(), dr3["hr_EmployeeID"].ToString());
childnode3.ToolTip = dr3["hr_EmployeeID"].ToString();
childnode3.SelectAction = TreeNodeSelectAction.Expand;
childnode2.ChildNodes.Add(childnode3);
}
dr3.Close();
conn3.Close();
}
dr2.Close();
conn2.Close();
}
dr.Close();
conn.Close();
}
dr0.Close();
conn0.Close();
}
这样太慢了,300来个人快死掉了,怎么办啊?
解决方案 »
- 含有“%”号的url字符串编码
- 为什么同样的原创更新 有的收录有的不收录呢?
- 关于AspNetPager使用方法的问题
- 关于cookie保存值
- js 如何实现下面的功能?
- MSN里面有很多这样的气泡提示框,他提示用户一些消息,而后自行消失,请问这是如何实现的。请教各位高手,如有原代码,发 [email protected],马上给分。
- [请教]如何在服务器端设置一个客户端button的属性,使其不可见或者是Enable的值?
- [高分]我在程序和Webconfig中都设置了编码方式,但为什么Cookie中文输出还为乱码?
- 后台repeater已经绑定 可是前台不显示 急急急!!!
- asp.net发布网站的时候出现, "发布遇到错误,未将对象引用设置到对象的实例。"
- 大侠们,服务器有几个.net framework 的漏洞需要打吗,我是asp.net网站?
- asp.net 页面的重新加载问题
第二:数据库的多次打开操作用连表查询的方式操作,减少到一次查询
第三:用cache代替到数据库查询数据这3条足够你提高速度了
2.也可如1L所说,第一次只加载公司,点+号才去加载对应的部门,点部门再加载组别。
3.3个嵌套循环查询,至少可简化为2个,用存储过程实现,返回两个表,或者说两个List<>对象,部门表对象,每个部门的小组用字符串拼接起来,这样就只用循环访问数据库(部门个数*公司个数)次,你现在的查询要做(部门个数*公司个数*小组个数)次查询的。
string selectDepartment = "select CompanyID,DepartmentID,DepartmentName from Department";
string selectTeam = "select DepartmentID,TeamID,TeamName from Team";
string selectEmployee = "select TeamID,b.EmployeeID,b.EngName from EmployeeStatus a,Employee b where a.EmployeeID=b.EmployeeID"; DataTable dtCompany = new DataTable();
DataTable dtDepartment = new DataTable();
DataTable dtTeam = new DataTable();
DataTable dtEmployee = new DataTable(); SqlDataAdapter adapterCompany = new SqlDataAdapter(selectCompany, conn);
adapterCompany.Fill(dtCompany); SqlDataAdapter adapterDepartment = new SqlDataAdapter(selectDepartment, conn);
adapterDepartment.Fill(dtDepartment); SqlDataAdapter adapterTeam = new SqlDataAdapter(selectTeam, conn);
adapterTeam.Fill(dtTeam); SqlDataAdapter adapterEmployee = new SqlDataAdapter(selectEmployee, conn);
adapterEmployee.Fill(dtEmployee); foreach (DataRow rowCompany in dtCompany.Rows)
{
TreeNode childnode0 = new TreeNode(rowCompany["CompanyEngName"].ToString(), rowCompany["CompanyID"].ToString());
childnode0.SelectAction = TreeNodeSelectAction.None;
childnode0.NavigateUrl = "javascript:;";
TreeView1.Nodes.Add(childnode0); DataRow[] rowsDepartment = dtDepartment.Select("CompanyID='" + childnode0.Value.Trim() + "'"); foreach (DataRow rowDepartment in rowsDepartment)
{
TreeNode childnode = new TreeNode(rowDepartment["DepartmentName"].ToString(), rowDepartment["DepartmentID"].ToString());
childnode.SelectAction = TreeNodeSelectAction.None;
childnode.CollapseAll();
childnode0.ChildNodes.Add(childnode); DataRow[] rowsTeam = dtTeam.Select("DepartmentID='" + childnode.Value.Trim() + "'"); foreach (DataRow rowTeam in rowsTeam)
{
TreeNode childnode2 = new TreeNode(rowTeam["TeamName"].ToString(), rowTeam["TeamID"].ToString());
childnode2.SelectAction = TreeNodeSelectAction.None;
childnode2.CollapseAll();
childnode.ChildNodes.Add(childnode2); DataRow[] rowsEmployee = dtEmployee.Select("TeamID='" + childnode2.Value.Trim() + "'"); foreach (DataRow rowEmployee in rowsEmployee)
{
TreeNode childnode3 = new TreeNode(rowEmployee["EngName"].ToString(), rowEmployee["EmployeeID"].ToString());
childnode3.ToolTip = rowEmployee["EmployeeID"].ToString();
childnode3.SelectAction = TreeNodeSelectAction.Expand;
childnode3.CollapseAll();
childnode2.ChildNodes.Add(childnode3);
}
}
}
}
conn.Close();这样改进了,加载一直都很快,就是点+展开或收起时很慢,不知道怎么搞的?