数据库 xml treeview 的操作

日前遇到很多朋友提起怎么将数据库中的关联表缓存到xml文档,以及怎样再从xml读取缓存数据的问题。

我简单写了一个例子,可以参考。

首先 数据库中有两个表,一个是用户表,一个是用户奖罚记录表,奖罚表中记录了每个用户的奖罚情况,并记录用户id(userid)用于和用户表关联。GetDataFromDataBase方法是从数据库获得数据的方法。                 

        public void WriteUserDataToXml()

        {

            string sql = "select top 100 * from Users";

            GetDataFromDataBase(sql);

            string result = "<?xml version=/"1.0/" encoding=/"utf-8/" ?>/r/n";

            result += "<Results>/r/n";

            result += "<users>/r/n";

            string result2 = "<awards>/r/n";

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                result += "<user id=/"" + dt.Rows[i][0].ToString() + "/" userid=/"" + dt.Rows[i][1].ToString() + "/">" + dt.Rows[i][2].ToString() + "</user>/r/n";

                result2 += WriteUserAwardDataToXml(dt.Rows[i][1].ToString());

            }

            result2 += "</awards>/r/n";

            result += "</users>/r/n";

            result += result2;

            result += "</Results>/r/n";

            File.WriteAllText(Server.MapPath("~/ddd.xml"), result);

        }
上面的这个方法用户插入xml文档用户表中前100行的数据,由于不同的用户要从奖罚表中根据userid读取不同的记录,所以我们用result2来保存这个数据,等到users节点插入完成以后,
再插入awards节点记录用户奖惩情况。
上面方法调用的WriteUserAwardDataToXml方法如下
 public string WriteUserAwardDataToXml(string userid)

        {

            string sql = "select * from Award where userid='" + userid+"'";

            GetDataFromDataBase(sql);

            string result = "";

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                result += "<award userid=/""+userid+"/">" + dt.Rows[i][4].ToString() + "</award>/r/n";

            }

            return result;

        }
----------------以下是读取xml文档内容并赋值给treeview------------
        public void GetUserDataFromXml()

        {

            XmlDocument myxml = new XmlDocument();

            myxml.Load(Server.MapPath("~/ddd.xml"));

            XmlNodeList mynotes = myxml.SelectNodes("/Results/users/user");

            for (int i = 0; i < mynotes.Count; i++)

            {

                addnote(TreeView1.Nodes[0].ChildNodes, mynotes[i].InnerText);

                GetUserAwardFromXml(mynotes[i].Attributes["userid"].Value.ToString(), i);

            }

        }
上面的方法先读取user节点下的值,并把这些值添加在treeview中,然后通过传值给GetUserAwardFromXml方法
查看是否该用户有奖罚记录。GetUserAwardFromXml方法如下。
        public void GetUserAwardFromXml(string userid,int noteindex)

        {

            XmlDocument myxml = new XmlDocument();

            myxml.Load(Server.MapPath("~/ddd.xml"));

            XmlNodeList mynotes = myxml.SelectNodes("/Results/awards/award");

            for (int i = 0; i < mynotes.Count; i++)

            {

                if(mynotes[i].Attributes["userid"].Value==userid)

                {

                    addnote(TreeView1.Nodes[0].ChildNodes[noteindex].ChildNodes, mynotes[i].InnerText);

                }

            }

        }
这个方法中,发现有用户的奖罚记录就会在该节点下添加一个子节点,以上两个方法中调用的addnote方法如下
        public void addnote(TreeNodeCollection mytreenodecolletion, string mytreenotetext)

        {

            TreeNode mytreenote = new TreeNode(mytreenotetext);

            mytreenodecolletion.Add(mytreenote);

        }
这个例子到这里就结束了,采用xml缓存数据库不易更换的数据可以减轻数据库压力,当然这只是减小压力的方法之一。
本文由keyake原创。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值