一.树型数据库结构 及 树的一些基础知识
表名: testtree 【程序编程相关:用.net 2003开发Windows 】
首先我们来看一个简单的应用树….数据库设计如下图: 【推荐阅读:汇总c#.net常用函数和方法集 】
id username parentid1 a 02 b 13 c 24 d 15 e 26 f 5 【扩展信息:软件业的大敌:盗版与小农思想 】
字段:id (主键 自动递增1) username (这个任意了.只是一个数据字段) parentid (父节点的id值)
如果按树来排列这些数据 应该产生如下状态:a|____b| |____c| |____e| |____f||____d
如果按我们一般的习惯我们要从a开始删除整棵树的话 有多种算法 例: a-»b-»c-»e-»f-»d 或者 a-»b-»d-»c-»e-»f 算法多样..但由于是删除一整棵(注意 是删除) 如果不出意外的情况..上面的算法都能满足于.但由于是删除 我们要从树的子结点删除..为什么呢?因为从头节点删除的话.意外一出现..头节点删除了..但子节点却未删除 往后却查询不到这些子节点.产生了过多的垃圾的数据..如果从子节点删除的话.如有万一.子节点删除.而父节点未删除.父节点也能再询查询到,再进行删除操作? 这便是为什么要从尾部开始删除的原因了.
二.删除过程(代码)按照传统的思维 我们可能立即想到递规删除操作..我想讨论的也是这个?使用vs.net 建立一个c# 项目的 winform 工程, 拖拉两个button控件与一个label 控件 然后在开头的引用中 using system.data.sqlclient; 因为这是拿来操作数据库的类 ?然后我们要构建几个方法来实现我们的目标..即递规删除!变量:static string connstring="server=192.100.100.135;database=jay;uid=sa;pwd=;"; //sql server 连接串方法:sqlcommandshell(string sql): 方法 用来操作sql语句getdataset(string sql):方法 通过sql语句来获得一个dataset(它相当于是在断开数据库后..躲在内存中的数据库表 ? 我是这么认为的)sqldeleteid(string id) 指定要删除的id数据deletechildid(string id) 通过这个id号查询出它的孩子的id值
方法的具体实现过程: /// <summary> /// 获得一个sql语句执行 /// </summary> /// <param name="sql">sql语句</param> /// <returns>返回所影响的数据行数 </returns> public static int sqlcommandshell(string sql) { sqlconnection conn=new sqlconnection(connstring); conn.open(); sqlcommand cm=new sqlcommand(sql,conn); int i=cm.executenonquery(); conn.close(); return i; }
... 下一页