J'espère que quelqu'un pourra m'aider avec ce problème.C# MySqlCommand Problème de clés étrangères multiples Drop
J'ai une petite application pour 'patcher' notre base de données car nous devons augmenter la fonctionnalité et corriger les bogues. Il lit dans les patches qui sont juste des fichiers avec des instructions SQL et fait un peu de ménage interne, interrogeant la base de données et appliquant les correctifs qui n'ont pas été appliqués. En tout cas, c'est la solution que nous avons, bonne ou mauvaise, et ça a plutôt bien fonctionné ... jusqu'à maintenant.
J'ai trouvé nécessaire de supprimer les contraintes de clé étrangère existantes sur un certain nombre de tables et de les remplacer par une clause ON DELETE CASCADE au lieu de ON DELETE RESTRICT qu'elles ont actuellement. L'idée étant que la suppression du PK sur la table que ces autres tables référencent entraînera le nettoyage de tous les autres.
Essentiellement le fichier patch est ce qui suit dans le:
ALTER TABLE `mydb`.`table2` DROP FOREIGN KEY `fk_table2_id`;
ALTER TABLE `mydb`.`table3` DROP FOREIGN KEY `fk_table3_id`;
ALTER TABLE `mydb`.`table4` DROP FOREIGN KEY `fk_table4_id`;
et associé
ALTER TABLE `mydb`.`table2` ADD CONSTRAINT `fk_table2_id` FOREIGN KEY `fk_table_id` (`fk_the_id`) REFERENCES `mydb` (`id`)
ON DELETE CASCADE
ON UPDATE RESTRICT;
etc...
Du côté C#, quand je passe cette chaîne (les instructions SQL trouvées dans le fichier patch) comme suit:
MySqlCommand myCommand = new MySqlCommand(thePatch);
myCommand.Connection = connection;
myCommand.ExecuteNonQuery();
Je reçois le message d'erreur suivant:
Erreur sur changement de nom de '\ mydb \ table2' . À (errno: 152)' \ mydb # sql2-6a8-3f. »
Je reçois quand seulement j'ai deux de ces DROP FOREIGN KEY lignes dans la chaîne.
Je me suis assuré que les clés listées sur les lignes DROP sont les clés et non les noms des colonnes et tout le reste semble (pour moi au moins) être OK.
J'ai inclus plusieurs instructions SQL dans un seul MySqlCommand et je n'ai eu aucun problème, donc je suis un peu frustré.
Je peux prendre le même fichier et le rediriger vers mysql.exe à partir de la ligne de commande et cela fonctionne très bien, donc cela semble être une différence dans la façon dont les instructions sont gérées.
Est-ce que quelqu'un a des idées sur celui-ci?
Merci, Matt