[小白问题]如何在删除父类的同时删除子类

MyNameIsXiXi 2012-05-12 12:33:48
数据结构:


数据层删除类
dal.Delete
public void Delete(int cate_id)
{

StringBuilder strSql=new StringBuilder();

strSql.Append("delete from Gcategory ");
strSql.Append(" where cate_id=@cate_id ");
SqlParameter[] parameters = {
new SqlParameter("@cate_id", SqlDbType.Int,4)};
parameters[0].Value = cate_id;

DbHelperSQL.ExecuteSql(strSql.ToString(),parameters);
}
业务逻辑层 bllGcategory.Delete
public void Delete(int cate_id)
{

dal.Delete(cate_id);
}

表示层 删除啊按钮触发事件
if (e.CommandName == "Delete")
{
int iUser_id = Convert.ToInt32((e.Item.FindControl("txtCate_id") as TextBox).Text.Trim());
bllGcategory.Delete(iUser_id);
BindData();
}

现在的处理结果是,父类删除后,子类仍然会保留在数据库中。

如何能在父类删除的同时,相应的子类也删除呢?
...全文
361 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你可以移到sql server板块去学学sql语句怎么写。一个删除(你所说的)“子类”记录的语句类似于:
delete a from [子类] a inner join [父类] b on a.xxxx=b.yyy where b.查询条件
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
真的不会喂~~这个也不是我写的--学校毕业设计要用的~~哎

引用 1 楼 的回复:

既然你写sql语句,不会连inner join都不知道滴。
[/Quote]

首先写一个inner join查询,删除你所说的“子类”记录。然后下一个查询删除你所说的“父类”记录。这两个sql语句在一个 SqlTrsanction 内执行。
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
是同一张表 那不是有张图吗!存储的时候没有关系 根据cate_id删除某一类时,parent_id=cate_id的对应子类也删除[Quote=引用 7 楼 的回复:]

引用 3 楼 的回复:
数据库就是那样啊--parent_id是父类 cate_id是子类 无父类时parent_id为0

引用 2 楼 的回复:

那要看你数据库是怎么设计的了吧


你这压根儿就是sql问题不是程序问题……
parent_id、cate_id是不是在一张表?他们是以什么关系存储的?
删除的需求是什么?是根据parent_id删除父类和所有子类还是根据c……
[/Quote]
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
??[Quote=引用 6 楼 的回复:]
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static int ExecuteSqlTran(List<String> SQLStringList)
……
[/Quote]
cnfixit 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
数据库就是那样啊--parent_id是父类 cate_id是子类 无父类时parent_id为0

引用 2 楼 的回复:

那要看你数据库是怎么设计的了吧
[/Quote]

你这压根儿就是sql问题不是程序问题……
parent_id、cate_id是不是在一张表?他们是以什么关系存储的?
删除的需求是什么?是根据parent_id删除父类和所有子类还是根据cate_id删除父类和所有子类?
魚躍龍門 2012-05-12
  • 打赏
  • 举报
回复

/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static int ExecuteSqlTran(List<String> SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
int count = 0;
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
}
}
tx.Commit();
return count;
}
catch
{
tx.Rollback();
return 0;
}
}
}
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
最好还是在程序上写 数据库操作危险系数太大 --昨天就不小心删了一张表~
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
真的不会喂~~这个也不是我写的--学校毕业设计要用的~~哎[Quote=引用 1 楼 的回复:]

既然你写sql语句,不会连inner join都不知道滴。
[/Quote]
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
数据库就是那样啊--parent_id是父类 cate_id是子类 无父类时parent_id为0[Quote=引用 2 楼 的回复:]

那要看你数据库是怎么设计的了吧
[/Quote]
cnfixit 2012-05-12
  • 打赏
  • 举报
回复
那要看你数据库是怎么设计的了吧
  • 打赏
  • 举报
回复
既然你写sql语句,不会连inner join都不知道滴。
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
我好厚道》。。。
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
虽然麻烦 不过这样处理是可以解决的
if (e.CommandName == "Delete")
{
int iUser_id = Convert.ToInt32((e.Item.FindControl("txtCate_id") as TextBox).Text.Trim());
//int iUser_id = Convert.ToInt32(this.dlGcategory1.DataKeys[e.Item.ItemIndex].ToString());
bllGcategory.Delete(iUser_id);
DataSet dsGcategory3=bllGcategory.GetSubByParent(iUser_id);//获取子类列表
//删除子类
if(dsGcategory3.Tables.Count>0)
{
for(int i=0;i<dsGcategory3.Tables[0].Rows.Count;i++)
{
int cate_id = Convert.ToInt32(dsGcategory3.Tables[0].Rows[i]["cate_id"].ToString());
bllGcategory.Delete(cate_id);

}
}

BindData();
}
}
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
呼啦~~OK了--
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
是同一张表啊。
[/Quote]

你的“父类、子类”又成了同一张表了?那么你纠结什么“父类删除后,子类仍然会保留在数据库中”呢?
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
这样只能删除一条记录..cate_id是唯一的[Quote=引用 13 楼 的回复:]

图看不到的

select parent_id from Gcategory where cate_id=@cate_id
delete from Gcategory where parent_id =@parent_id

我猜的……
[/Quote]
cnfixit 2012-05-12
  • 打赏
  • 举报
回复
图看不到的

select parent_id from Gcategory where cate_id=@cate_id
delete from Gcategory where parent_id =@parent_id

我猜的……
MyNameIsXiXi 2012-05-12
  • 打赏
  • 举报
回复
是同一张表啊。[Quote=引用 11 楼 的回复:]

你可以移到sql server板块去学学sql语句怎么写。一个删除(你所说的)“子类”记录的语句类似于:SQL code
delete a from [子类] a inner join [父类] b on a.xxxx=b.yyy where b.查询条件
[/Quote]
# 简介 纪念一下人生第一个C++程序,浙江大学2020春学期《C++与数据结构》期末作业:用异质链表实现一个职工管理系统,并可以将链表以二进制文件的形式储存在本地 # 人事管理系统 用所学过的知识编写一个简单的人事管理系统,要求功能如下 用链表存储、文件输入、输出。 具有建立、插入、删除、查询和打印功能。 平台不限、链表可用公共模板类(最好自己写)。 管理的人员有: 本科生:姓名、性别、年龄、身份证号码、高考总分 脱产研究生:姓名、性别、年龄、身份证号码、专业 在职研究生:姓名、性别、年龄、身份证号码、学号、专业、工资 职工:姓名、性别、年龄、身份证号码、工资、岗位 教师:姓名、性别、年龄、身份证号码、工资、专业 ## 一、作业概况简述 参考了老师提供了两篇文档:异质链表1.doc和异质链表2.doc 异质链表1.doc的思路是,先定义好Person基类和各种派生类,然后定义一个抽象的节点和链表类,这样做的好处是存储的内容(人的信息)和存储方式(链表)相互独立,便于后期维护。 异质链表2.doc则将每个Person都定义为一个节点,这样如果链表出错了或者需要变更功能,可能会影响到Person类的实现;或者如果我不想用链表了,想换个储存方式,那写在Person里的有关节点的东西就没有用处了,降低了代码的存储效率和可读性,这种情况下代码就略显冗余。 写到后面发现如果要追求链表类和Person及其派生类完全独立,就涉及到类访问权限、模板类友元、声明的问题,写起来很繁琐,所以也没有做到二者完全独立。 另外文件读写方面用到是二进制的读写,牵扯出一系列麻烦事儿,在3.6节有详细叙述。 ## 二、系统概述 本系统分为四个部分: 1.Interface.h与Interface.cpp 主界面的声明与实现 2.Person.h 定义并实现了Person基类,Undergraduate本科生子类,FullTimePostgraduate脱产研究生子类,OnJobPostgraduate在职研究生子类,Worker职工子类,Teacher教师子类。 3.HeterList.h 定义并实现了基于模板的Node类和HeterList类,拥有建立(构造函数)、插入(Insert)、删除(Delete)、查询(Search)和打印(Display)功能。 4.Main.cpp 和用户交互的主程序,为了便于测试,系统设计了一个test02()函数,并默认在main()中调用,作用是给系统初始化5个人物: ## 三、功能概述 ### 3.1 建立新表并查看默认的5个人物: ### 3.2 插入一个人物: ### 3.3 删除一个人物: 由于只有身份证不会重复,因此只提供搜寻身份证删除功能。如果需要删除叫“张三”的人,需要先搜索所有叫“张三”的人,然后决定删除哪一个,输入他的身份证号即可。 ### 3.4 查找一个人物: 提供了按姓名、性别、年龄批量查找,和按身份证号精确查找 ### 3.5 清空链表: ### 3.6 保存和读取: 这里采用二进制文件读写,直接保存Person的几个子类。 这里有个大坑: 由于二进制读写是直接读写对象,因此: 1. 保存的时候不能直接用异质链表里的节点储存的对象,因为异质链表里的是Person类型而不是子类,最终保存的对象是不含有子类独有的成员函数的; 2. 读取的时候就要确定是哪一个子类,否则无法读取。同时读取的是含有虚函数的子类,此时虚表指针无法指向虚函数表,强行调用读取后的子类的函数会引起访问权限冲突。 基于以上两点: 1. 在储存的时候,按照不同的子类分文件储存,如下: 2. 在储存的时候,栈区创建一个子类X,将链表上的Person类的值赋给子类X(C++默认的构造函数是不支持父类直接拷贝给子类的,因此我在每一个子类里都写了一个父类赋值给子类的构造函数),向文件中写入X。 3. 在读取的时候,为了解决虚函数表的问题,我又用拷贝构造重新new了一个新的子类,新的子类的虚函数表是没有问题 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
【完整课程列表】 完整资源地址:https://download.csdn.net/download/qq_27595745/55587888 优质java课件 java程序设计教程(第6版)01.计算机系统概述(共42页).ppt 优质java课件 java程序设计教程(第6版)02.数据与表达式(共62页).ppt 优质java课件 java程序设计教程(第6版)03.使用类和对象(共49页).ppt 优质java课件 java程序设计教程(第6版)04.编写类(共61页).ppt 优质java课件 java程序设计教程(第6版)04.类的复习(共9页).ppt 优质java课件 java程序设计教程(第6版)04.中期回顾 类、构造方法(共18页).ppt 优质java课件 java程序设计教程(第6版)05.深入的条件判断和循环(共28页).ppt 优质java课件 java程序设计教程(第6版)05.条件和循环语句(共58页).ppt 优质java课件 java程序设计教程(第6版)05.条件判断和循环复习(共23页).ppt 优质java课件 java程序设计教程(第6版)06.面向对象设计(共84页).ppt 优质java课件 java程序设计教程(第6版)06.中期复习 类和对象(共11页).ppt 优质java课件 java程序设计教程(第6版)06.最后一次课 静态修饰(共21页).ppt 优质java课件 java程序设计教程(第6版)07.数组(共57页).ppt 优质java课件 java程序设计教程(第6版)07.数组复习(共19页).ppt 优质java课件 java程序设计教程(第6版)08.继承(共14页).ppt 优质java课件 java程序设计教程(第6版)09.多态性(共41页).ppt 优质java课件 java程序设计教程(第6版)10.异常(共56页).ppt

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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