Je dois parfois supprimer deux enregistrements dans des tables différentes. Comment puis-je exécuter la requête de telle sorte que si l'une d'entre elles échoue, l'autre ne s'exécute pas et vice-versa. En d'autres termes, la base de données ne sera mise à jour que si les deux requêtes sont réussies, sinon aucune modification ne sera apportée. De cette façon, si je reçois des erreurs, je sais que rien n'a changé. J'exécute cette requête en C# comme suit :
//qDelete is a string containing the query
// connection - SqlConnection
SqlCommand cmd = new SqlCommand(qDelete, connection);
try
{
var t = cmd.ExecuteNonQuery();
MessageBox.Show("Query succesfully executed \n \n" + "\n\n" + t + " records successfully deleted");
}
catch
{
//do something here to avoid having any changes to the database
}
C'est génial. Ma chaîne sDelete est construite dynamiquement et la seule chose qui me manque est de placer les déclarations dans le bon ordre. J'ai compris que je dois d'abord supprimer les enregistrements de la table dépendante ou de la table qui a des contraintes, puis de l'autre table. Comment puis-je voir quelle table dépend de l'autre ? Cela m'aidera à construire cette requête. Je pourrais faire quelque chose comme trier toutes les chaînes et placer celles qui contiennent la table qui n'a pas de contrainte en premier puis placer les autres. Comment puis-je savoir quelle table dépend de l'autre pour que cela soit encore mieux ?