如何在另一个表中删除包含其父行的数据的行
有两个表[ UserData
]和[ HotelData
]我用外键链接它们。 这是“ Username
”,我想删除哪个用户名输入,并删除其在第二个表上的数据。 我不知道如何编写sql命令或c#。
System.Data.dll中发生了未处理的“System.Data.SqlClient.SqlException”类型exception
附加信息:DELETE语句与REFERENCE约束“FKHotelData”冲突。 冲突发生在数据库“E:\ GRADED UNIT DEV \ BLACKMARCH \ BLACKMARCH \ BIN \ DEBUG \ DATABASEBM.MDF”,表“dbo.HotelData”,列’Username’中。
该语句已终止。
private void btnDelete_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\Graded unit Dev\BlackMarch\BlackMarch\bin\Debug\DataBaseBM.mdf;Integrated Security=True;Connect Timeout=30"); string sqlStatement = "DELETE FROM UserData WHERE Username = @Username"; con.Open(); SqlCommand cmd = new SqlCommand(sqlStatement, con); cmd.Parameters.AddWithValue("@Username", txtUsernameUser.Text); cmd.CommandType = CommandType.Text; cmd.ExecuteNonQuery(); con.Close(); }
从UserData
表中删除记录时,无需编写任何代码来删除子表上的数据。 只需使用Cascade
删除行为。 这意味着如果删除父表中的记录,则会自动删除子表中的相应记录。
执行以下步骤:
- 打开子表的设计器,然后单击“ 关系”
- 在打开的窗口和表设计器中展开INSERT和UPDATE规范
- 将删除规则从无操作更改为级联
如下图所示:
DELETE语句与REFERENCE约束“FKHotelData”冲突
你有一个约束,这有助于提高性能,帮自己一个忙,并添加一个默认值为0的列IsDeleted或允许null,所以它不会影响任何东西。
然后将SELECT查询更改为包含条件的WHERE子句
WHERE IsDeleted = 0
这里的重点是它的酒店业务,他们将需要指标/报告预订。 出于医疗和保密目的,我倾向于级联删除答案。 对于这种情况,最好是逻辑删除数据而不是物理删除它。
好。 扩展另一个不完全理想的选项,但也应该可用。 但是CASCADE更容易使用。
没有它,你最好的选择是
DELETE FROM HotelData WHERE Username = @Username
其次是
DELETE FROM UserData WHERE Username = @Username
- Windows服务无法从我的Installer构造函数中访问app.config
- ASP.NET – Ajax.BeginForm OnSuccess使用params回调
- 为什么这段代码为(看起来是)相同的输入提供了两个不同的输出?
- 我被异步/等待宠坏了! 现在正在努力与明确的任务延续
- 如何强制XDocument在声明行中输出“UTF-8”?
- 从C#调用Delphi DLL会产生意外结果
- 如何构造控制器来排序多个标准asp.net mvc
- WCF:通用接口的序列化是否可行?
- “无法将’System.Byte ‘类型的对象强制转换为’System.IConvertible’。”照片中的错误:为什么以及如何修复它?