数据库缓存:将数据库中的关联表缓存到xml文档来源: 发布时间:星期四, 2009年2月12日 浏览:181次 评论:0
日前遇到很多朋友提起如何将数据库中关联表缓存Cache到xml文档以及怎样再从xml读取缓存Cache数据问题 我简单写了个例子可以参考 首先 数据库中有两个表个是用户表个是用户奖罚记录表奖罚表中记录了每个用户奖罚情况并记录用户id(userid)用于和用户表关联GetDataFromDataBase思路方法是从数据库获得数据思路方法 view plaincopy to clipboardpr? public void WriteUserDataToXml { sql = "select top 100 * from Users"; GetDataFromDataBase(sql); result = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n"; result "<Results>\r\n"; result "<users>\r\n"; result2 = "<awards>\r\n"; for ( i = 0; i < dt.Rows.Count; i) { result "<user id=\"" + dt.Rows[i][0]. + "\" userid=\"" + dt.Rows[i][1]. + "\">" + dt.Rows[i][2]. + "</user>\r\n"; result2 WriteUserAwardDataToXml(dt.Rows[i][1].); } result2 "</awards>\r\n"; result "</users>\r\n"; result result2; result "</Results>\r\n"; File.WriteAllText(Server.MapPath("~/ddd.xml"), result); } public void WriteUserDataToXml { sql = "select top 100 * from Users"; GetDataFromDataBase(sql); result = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n"; result "<Results>\r\n"; result "<users>\r\n"; result2 = "<awards>\r\n"; for ( i = 0; i < dt.Rows.Count; i) { result "<user id=\"" + dt.Rows[i][0]. + "\" userid=\"" + dt.Rows[i][1]. + "\">" + dt.Rows[i][2]. + "</user>\r\n"; result2 WriteUserAwardDataToXml(dt.Rows[i][1].); } result2 "</awards>\r\n"; result "</users>\r\n"; result result2; result "</Results>\r\n"; File.WriteAllText(Server.MapPath("~/ddd.xml"), result); }view plaincopy to clipboardpr? 上面这个思路方法用户插入xml文档用户表中前100行数据,由于区别用户要从奖罚表中根据userid读取区别记录所以我们用result2来保存这个数据等到users节点插入完成以后 上面这个思路方法用户插入xml文档用户表中前100行数据,由于区别用户要从奖罚表中根据userid读取区别记录所以我们用result2来保存这个数据等到users节点插入完成以后view plaincopy to clipboardpr? 再插入awards节点记录用户奖惩情况 再插入awards节点记录用户奖惩情况view plaincopy to clipboardpr? 上面思路方法WriteUserAwardDataToXml思路方法如下 上面思路方法WriteUserAwardDataToXml思路方法如下view plaincopy to clipboardpr? <PRE =csharp name="code"> public WriteUserAwardDataToXml( userid) { sql = "select * from Award where userid='" + userid+"'"; GetDataFromDataBase(sql); result = ""; for ( i = 0; i < dt.Rows.Count; i) { result "<award userid=\""+userid+"\">" + dt.Rows[i][4]. + "</award>\r\n"; } result; }</PRE> view plaincopy to clipboardpr?public WriteUserAwardDataToXml( userid) { sql = "select * from Award where userid='" + userid+"'"; GetDataFromDataBase(sql); result = ""; for ( i = 0; i < dt.Rows.Count; i) { result "<award userid=\""+userid+"\">" + dt.Rows[i][4]. + "</award>\r\n"; } result; } public WriteUserAwardDataToXml( userid) { sql = "select * from Award where userid='" + userid+"'"; GetDataFromDataBase(sql); result = ""; for ( i = 0; i < dt.Rows.Count; i) { result "<award userid=\""+userid+"\">" + dt.Rows[i][4]. + "</award>\r\n"; } result; } view plaincopy to clipboardpr? <PRE =csharp name="code">----------------以下是读取xml文档内容并赋值给treeview------------</PRE> <PRE =csharp name="code"><PRE =csharp name="code"> public void GetUserDataFromXml { XmlDocument myxml = XmlDocument; myxml.Load(Server.MapPath("~/ddd.xml")); XmlNodeList mynotes = myxml.SelectNodes("/Results/users/user"); for ( i = 0; i < mynotes.Count; i) { addnote(TreeView1.Nodes[0].ChildNodes, mynotes[i].InnerText); GetUserAwardFromXml(mynotes[i].Attributes["userid"].Value., i); } }</PRE> <PRE =csharp name="code">上面思路方法先读取user节点下值并把这些值添加在treeview中然后通过传值给GetUserAwardFromXml思路方法</PRE> <PRE =csharp name="code">查看是否该用户有奖罚记录GetUserAwardFromXml思路方法如下</PRE> <PRE =csharp name="code"><PRE =csharp name="code"> public void GetUserAwardFromXml( userid, noteindex) { XmlDocument myxml = XmlDocument; myxml.Load(Server.MapPath("~/ddd.xml")); XmlNodeList mynotes = myxml.SelectNodes("/Results/awards/award"); for ( i = 0; i < mynotes.Count; i) { (mynotes[i].Attributes["userid"].Valueuserid) { addnote(TreeView1.Nodes[0].ChildNodes[noteindex].ChildNodes, mynotes[i].InnerText); } } }</PRE> <PRE =csharp name="code">这个思路方法中发现有用户奖罚记录就会在该节点下添加个子节点以上两个思路方法中addnote思路方法如下</PRE> <PRE =csharp name="code"><PRE =csharp name="code"> public void addnote(TreeNodeCollection mytreenodecolletion, mytreenotetext) { TreeNode mytreenote = TreeNode(mytreenotetext); mytreenodecolletion.Add(mytreenote); }</PRE> <PRE =csharp name="code">这个例子到这里就结束了采用xml缓存Cache数据库不易更换数据可以减轻数据库压力当然这只是减小压力思路方法的</PRE> <PRE =csharp name="code">本文由keyake原创</PRE> </PRE> </PRE> </PRE> 1
相关文章读者评论发表评论 |