access数据库删除无限级分类语句怎么写?

qq417349857 2010-10-15 10:40:12
请教一下access数据库删除无限级分类语句怎么写?
数据库里就三列 id,classname,pid
已知父ID=44
怎么删除他的子类和子类的子类?
...全文
147 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
williemii 2010-10-15
  • 打赏
  • 举报
回复
只要三个层次么?
种草德鲁伊 2010-10-15
  • 打赏
  • 举报
回复


var list = new List<Category>()
{
new Category(1, 0) ,
new Category(2, 0) ,
new Category(3, 1) ,
new Category(4, 1) ,
new Category(5, 3) ,
new Category(6, 3)
};

var children = GetChildren(list, 1);
string sql = "delete from [table] where id in (" + String.Join(", ", children.Select( c => c.Id.ToString()).ToArray()) + ")";

Console.WriteLine(sql);

lbjlbjabc01 2010-10-15
  • 打赏
  • 举报
回复
来学习下~~
yan267 2010-10-15
  • 打赏
  • 举报
回复


string allid = "";//定义全局变量保存ID
public void getCalculatorQTY(int ID)
{

if (allid == "")
{
allid = ID.ToString();
}
else
{
allid = allid + "," + ID.ToString();
}
DataTable dt = new DataTable();
string sql = "select id from table where pid=" + ID + "";
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
getCalculatorQTY(dt.Rows[i]["id"].ToString());
}


}

}




大致改了点,思路应该是这样的,你自己试试,看看递归是不是死循环。如果是可能有点错误。

最后allid就是全部的pid了。

种草德鲁伊 2010-10-15
  • 打赏
  • 举报
回复


public class Category
{
public int Id { get; set; }

public string Name { get; set; }

public int ParentId { get; set; }
}






public List<Category> GetChildren(List<Category> list, int parentId)
{
var children = new List<Category>();

foreach (var item in list.Where(c => c.ParentId == parentId))
{
children.Add(item);
children.AddRange(GetChildren(list, item.Id));
}
return children;
}

qq417349857 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yan267 的回复:]
引用 8 楼 qq417349857 的回复:
C# code

//是父类
string ids = "";
ids += id + ",";
string ziID = "";

strin……


拿到子id的时候,继续上面的代码如何还有再继续。一直到没有为止,
[/Quote]

我也知道这个思路 就是不知道该怎么往下写了

yan267 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq417349857 的回复:]
C# code

//是父类
string ids = "";
ids += id + ",";
string ziID = "";

strin……
[/Quote]

拿到子id的时候,继续上面的代码如何还有再继续。一直到没有为止,

qq417349857 2010-10-15
  • 打赏
  • 举报
回复
怎么往下写?这样是查询出了一个子ID
qq417349857 2010-10-15
  • 打赏
  • 举报
回复
 
//是父类
string ids = "";
ids += id + ",";
string ziID = "";

string sqqq = "select id from T_ProductClass where pid=" + id;
ziID = eu.AccessSearchValue(sqqq);
yan267 2010-10-15
  • 打赏
  • 举报
回复
递归还是要在程序做的比较好,单用sql写比较麻烦。
qq417349857 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 karascanvas 的回复:]
由程序遍历获取id, sql只管删除就行了。
[/Quote]

循环次数怎么取?
种草德鲁伊 2010-10-15
  • 打赏
  • 举报
回复
由程序遍历获取id, sql只管删除就行了。
qq417349857 2010-10-15
  • 打赏
  • 举报
回复
小弟琢磨了好久了 还是写不出来
yan267 2010-10-15
  • 打赏
  • 举报
回复
都要先递归pid,找出所有关联的pid才能删除到最底层的。

种草德鲁伊 2010-10-15
  • 打赏
  • 举报
回复
递归遍历子分类。
qq417349857 2010-10-15
  • 打赏
  • 举报
回复
别人的项目我接手 不想动别人数据库

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧