Il y a deux tables [ UserData
] et [ HotelData
] Je les ai liées avec une key étrangère. qui est " Username
" et je veux supprimer quel nom d'user est entré et supprimer ses données sur la 2ème table. Je ne sais pas comment écrire la command sql ou c #.
Une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll
Informations supplémentaires: L'instruction DELETE était en conflit avec la contrainte REFERENCE "FKHotelData". Le conflit s'est produit dans la database "E: \ GRADED UNIT DEV BLACKMARCH \ BLACKMARCH \ BIN \ DEBUG \ DATABASEBM.MDF", table "dbo.HotelData", colonne "Username".
La déclaration a été résiliée.
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"); ssortingng 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(); }
Il n'est pas nécessaire d'écrire du code pour supprimer des données de la table enfant lorsque vous supprimez un logging de la table UserData
. Utilisez simplement le comportement de suppression Cascade
. Cela signifie que si un logging de la table parent est supprimé, les loggings correspondants dans la table enfant seront automatiquement supprimés.
Faites les étapes suivantes:
Comme l'image suivante:
L'instruction DELETE est en conflit avec la contrainte REFERENCE "FKHotelData"
Vous avez une contrainte et cela aide avec les performances, faites-vous une faveur et ajoutez une colonne IsDeleted avec une valeur par défaut de 0 ou pour autoriser des null, donc cela n'affecte rien.
Ensuite, modifiez vos requêtes SELECT pour avoir une clause WHERE qui inclut la condition
WHERE IsDeleted = 0
Le point ici est que c'est une affaire d'hôtel et ils voudront des mésortingques / rapports sur les réservations. À des fins médicales et de confidentialité, je pencherais vers la suppression des réponses en cascade. Pour ce scénario, il serait préférable de supprimer logiquement datatables au lieu de les supprimer physiquement .
Bien. Pour développer l'autre option qui n'est pas exactement idéale, mais devrait également être disponible. CASCADE est plus facile à utiliser.
Sans cela, votre meilleur pari est
DELETE FROM HotelData WHERE Username = @Username
Suivi par
DELETE FROM UserData WHERE Username = @Username