有两个表[UserData
]和[HotelData
]我已将它们与外键相关联。这是" Username
"我想删除哪个用户名输入并删除其在第二个表上的数据。我不知道如何编写sql命令或c#。
类型' System.Data.SqlClient.SqlException'未处理的异常 发生在System.Data.dll
中其他信息:DELETE语句与 参考约束" FKHotelData"。冲突发生在数据库中 " E:\ GRADED UNIT DEV \ BLACKMARCH \ BLACKMARCH \ BIN \ DEBUG \ DATABASEBM.MDF", table" dbo.HotelData",column' 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();
}
答案 0 :(得分:2)
从UserData
表中删除记录时,无需编写任何代码来删除子表上的数据。只需使用Cascade
删除行为即可。这意味着如果删除父表中的记录,则会自动删除子表中的相应记录。
执行以下步骤:
答案 1 :(得分:1)
DELETE语句与REFERENCE约束冲突" FKHotelData"
你有一个约束,这有助于提高性能,帮自己一个忙,并添加一个IsDeleted列,默认值为0或允许空值,所以它不会影响任何事情。
然后将SELECT查询更改为包含条件
的WHERE子句 WHERE IsDeleted = 0
这里的重点是它是一家酒店业务,他们希望有关预订的指标/报告。出于医疗和保密目的,我倾向于级联删除答案。对于这种情况,最好逻辑删除数据,而不是物理删除它。
答案 2 :(得分:0)
好。扩展另一个不完全理想的选项,但也应该可用。 CASCADE更容易使用。
没有它,你最好的选择是
DELETE FROM HotelData WHERE Username = @Username
其次是
DELETE FROM UserData WHERE Username = @Username