递归 删除层级记录

PrimaryKey    UpLevelCompCode   UpLevelCompName   CurrentLevelCompCode    CurrentLevelCompName    CurrentLevel
1                           0                             0                             NULL                                    NULL                        0
2                           0                             0                                 1                                      1                              1
3                           0                             0                                 2                                      2                              1
4                           1                             1                                 3                                      3                              2
5                           1                             1                                 4                                      4                              2
6                           3                             3                                 5                                      5                              3
7                           3                             3                                 6                                      6                              3

//递归 删除层级记录
public static void Delete(string code,int level,string sign)
{
    if(level>0)
    {
    System.Data.DataSet ds = bll.SelectDepartLevelMaintainByFilter(" and "+sign+" = '"+code+"' and CurrentLevel="+level);
    if(ds!=null)
    {
        if(ds.Tables[0]!=null)
        {
            if(ds.Tables[0].Rows.Count>0)
            {
                foreach(System.Data.DataRow dr in ds.Tables[0].Rows)
                {
                    string _code = dr["CurrentLevelCompCode"].ToString().Trim();
                    int _level = Convert.ToInt32(dr["CurrentLevel"].ToString().Trim());
                    long _pk = Convert.ToInt64(dr["PrimaryKey"].ToString().Trim());
                    Delete(_code,_level+1,"UpLevelCompCode");
                    bll.DeleteDepartLevelMaintain(_pk);
                }
            }
        }
    }
   }
}
DepartLevelMaintainBLL bll = new DepartLevelMaintainBLL ();
System.Data.DataRow dr = bll.SelectDepartLevelMaintainByFilter(" and PrimaryKey = "+2).Tables[0].Rows[0];
string _code = dr["CurrentLevelCompCode"].ToString().Trim();
int _level = Convert.ToInt32(dr["CurrentLevel"].ToString().Trim());
TestMethod.Delete(_code,_level,"CurrentLevelCompCode");

 

实际上可以将CurrentLevel可以设计成有层级的值,这样删除的时候根据条件删除就可以了。

如:

CurrentLevel
00
001
002
00101
00102
0010101
0010102

字段设计成这样删除时就不用使用层级查找了。直接SUBSTRING(.....)=.....就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值