用递归读取数据库(*.MDB)生成树节点(TreeNode)

加载数据库记录生成树节点(TreeNode),才1500多个记录就要用4分多钟,实在太慢,经过思考,减少了一些不必要的查询和赋值,速度提升得比较明显,可能是机器较旧,最终结果都不理想,当然,这个与自己的技术太烂有关。

数据库中有1500多个记录,用递归的方法将记录一次性全部添加到TreeNode当中,第一次加载用时4分多钟,修改之后3分多钟,再次修改后是1分多钟。项目运行环境:单核CPU,2GB DDR2内存,Win7 x86旗舰版,C# 2010 Express,.NET4,ACCESS(*.MDB)数据库。

原代码:
        //递归添加子节点
        public static void AddTreeNode(TreeNode node,String GUID)
        {
            node.Name = GUID;
            DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select * from FamilyTree where P_GUID = @P_GUID AND Generation > 1", new OleDbParameter("@P_GUID", node.Name));
            foreach (DataRow row in table.Rows)
            {
                TreeNode n = new TreeNode();
                n.Name = row["M_GUID"].ToString();
                n.Text = row["NameText"].ToString();
                n.Tag = row["Code"].ToString();
                node.Nodes.Add(n);
                AddTreeNode(n,n.Name);
            }
        }

第一次修改:减少了一个多余的参数,注释掉TreeNode的Tag属性赋值
         //递归添加子节点
        public static void AddTreeNode(TreeNode node)
        {
            //node.Name = GUID;
            DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select * from FamilyTree where P_GUID = @P_GUID AND Generation > 1", new OleDbParameter("@P_GUID", node.Name));
            foreach (DataRow row in table.Rows)
            {
                TreeNode n = new TreeNode();
                n.Name = row["M_GUID"].ToString();
                n.Text = row["NameText"].ToString();
                //n.Tag = row["Code"].ToString();
                node.Nodes.Add(n);
                AddTreeNode(n);
            }
        }

第二次修改:将查询语句返回的列由所有(*)改为要用到两列(M_GUID,NameText)
        //递归添加子节点
        public static void AddTreeNode(TreeNode node)
        {
            //node.Name = GUID;
            DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select M_GUID,NameText from FamilyTree where P_GUID = @P_GUID AND Generation > 1", new OleDbParameter("@P_GUID", node.Name));
            foreach (DataRow row in table.Rows)
            {
                TreeNode n = new TreeNode();
                n.Name = row["M_GUID"].ToString();
                n.Text = row["NameText"].ToString();
                //n.Tag = row["Code"].ToString();
                node.Nodes.Add(n);
                AddTreeNode(n);
            }
        }

时间: 2024-11-25 21:30:02

用递归读取数据库(*.MDB)生成树节点(TreeNode)的相关文章

C# 递归读取XML菜单数据

在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客.小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据写在数据库表,然后直接读取加载到菜单树上显示. 现在想把菜单数据都放在XML里,然后递归读取XML. 由于项目使用WCF,实体类使用了两个,一个是业务逻辑层中的实体,一个是调用业务逻辑层递归方法后进行数据实体的转换,XML读取方法写在业务逻辑层中. 思路:1.先读取XML里所有的菜单    2.根据

PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式

方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时)→返回数据 ↓                                              ↑ 缓存(缓存生效时)     →   →    →    → 方案三:定时读取缓存方式(crontab 定时任务) 封装并返回数据 ↑ 数据库→crontab→缓存 ↑ http 请求 ==

树形图控件(附加读取数据库)

树视图控件能够按层次结构组织和管理数据,通常用于显示树状结构数据. 先截个图 : 这个是程序的最终运行结果.其中树节点上的文本文字是从数据库中读取. 下面是程序步骤:     (1)新建一个基于对话框的应用程序TreeViewCtrl,在对话框中添加树视图控件.     (2)在类向导中将树视图控件命名为m_treectrl.     (3)选中树视图控件,右键点击属性,设置控件属性如图. (4)因为要读取数据库,所以要首先链接数据库: 在stdafx.h文件中添加: #import "C:\P

Clementine读取数据库文件

看了一些网上写的资料,不太熟悉数据库和ODBC,只是总结下如何读取. Clementine读取数据库文件,该数据库文件时Access数据库文件. 第一步,建立数据源 win7系统下,win+R后输入odbcad32,出现ODBC数据管理器,在系统DSN中选择添加 打开数据源配置,发现只有SQLServer的驱动,其他的都没有了. 解决方法是: C:\Windows\SysWOW64 在这个目录下找到: odbcad32.exe 这个文件,双击打开.在网上看到的,没有试验. 输入数据源名,在数据库

TreeView树形控件递归绑定数据库里的数据

TreeView树形控件递归绑定数据库里的数据. 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="tree.aspx.cs" Inherits="Maticsoft.Web.tree" %> 2 3 <!DOCTYPE

C#递归读取指定路径下的所有文件并保存至TreeView

1.代码如下: /// <summary> /// 递归读取指定路径下的所有文件信息 /// </summary> /// <param name="path"></param> /// <param name="node"></param> private void DIGuiGetFile(string path, TreeNode node) { if (!Directory.Exists

读取xml并将节点保存到Excal

using NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using Sy

分布式数据库集群节点数据一致性校验

某500强客户要上线一个功能,其后台所有数据库是我司设计开发的NoSQL数据库. 为了避免数据库集群中,数据节点不一致而导致问题,需要对数据库节点间的数据进行校验. 理论上说,数据库节点之间的数据,应当保持最终一致性.而我司的数据库,是在对主节点对数据进行操作时,coord节点会(立即)通知备节点拉取数据,从而保持数据的一致性.所以,对于正常运行的数据库来说,一个集群内每个节点上的数据,是完全一致的. 客户是上帝,我们所作的就是要让客户放心.虽然我们强调我们的数据库集群内的节点中数据是一致的,让

读取数据库数据,并将数据整合成3D饼图在jsp中显示

首先我将生成饼图的方法独立写成一个PieChar.java类,详细代码如下:(数据库需要自己建,如有需要的话) 1 import java.io.IOException; 2 import java.sql.SQLException; 3 import org.jfree.chart.ChartFactory; 4 import org.jfree.chart.JFreeChart; 5 import org.jfree.data.general.DefaultPieDataset; 6 7 p