J'essaye d'exécuter plusieurs SqlCommand dans la même connection, mais pour une raison quelconque le programme s'arrêtera à la seconde
command.ExecuteNonQuery();
Voici mon code:
ssortingng querySsortingng = "SELECT DISTINCT Titre from infosHoraire where Salle='DOO';" + "SELECT DISTINCT Titre from infosHoraire where Salle='FOO' and Jour <='" + finDate + "';" + "SELECT DISTINCT Titre from infosHoraire where Salle='GOO' and Jour <='" + finDate + "';"; using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionSsortingngs["ConsoleXMLtoDB"].ConnectionSsortingng)) { SqlCommand command = new SqlCommand(querySsortingng, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); try { // on remplit le dico while (reader.Read()) { MoviesList.Add(reader[0].ToSsortingng(), "0"); searchCode(reader[0].ToSsortingng(), MoviesList); //Console.WriteLine(" On rajoute le code {0}", MoviesList[reader[0].ToSsortingng()]); } reader.NextResult(); while (reader.Read()) { if (!MoviesList.ContainsKey(reader[0].ToSsortingng())) { MoviesList.Add(reader[0].ToSsortingng(), "0"); searchCode(reader[0].ToSsortingng(), MoviesList); } } reader.NextResult(); while (reader.Read()) { if (!MoviesList.ContainsKey(reader[0].ToSsortingng())) { MoviesList.Add(reader[0].ToSsortingng(), "0"); } } foreach (ssortingng key in MoviesList.Keys) { Console.WriteLine("MoviesList {0}, code {1} .", key, MoviesList[key]); // RAJOUTER DONNEES HORAIRES command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'"; //cmd.Parameters.AddWithValue("@code", MoviesList[key]); IT STOPS HERE. command.ExecuteNonQuery(); } } catch (Exception) { //Console.WriteLine("{0} Exception caught.", e); } finally { // Always call Close when done reading. reader.Close(); connection.Close(); } }
MoviesList est un
Dictionary<ssortingng, ssortingng>
Je ne peux pas vraiment find d'où vient le problème.
Cela fonctionnera bien si je supprime ceci:
foreach (ssortingng key in MoviesList.Keys) { //literaltest.Text += "<br/> dictionary " + key + "," + MoviesList[key]; Console.WriteLine("MoviesList {0}, code {1} .", key, MoviesList[key]); // RAJOUTER DONNEES HORAIRES command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'"; //cmd.Parameters.AddWithValue("@code", MoviesList[key]); command.ExecuteNonQuery(); }
Modifier: Essayez de mettre un point d'arrêt sur votre capture et voir s'il y a une erreur.
catch (Exception e) { //Console.WriteLine("{0} Exception caught.", e); }
Passez votre souris sur e et vous devriez être en mesure de voir le message d'erreur. Puis collez-le ici. C'est probablement votre requête causant le problème plutôt que l'object de command
Modifier. L'object lecteur est toujours en cours d'exécution ce qui vous limite à utiliser à nouveau l'object de command. Fermez le lecteur avant d'essayer d'exécuter la command suivante
reader.Close();
supprimer la condition de votre requête d' insert
suivante
command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'";
Le SQLDataReader que vous avez utilisé pour lire les loggings est toujours ouvert et utilise cette connection. Vous devez fermer ce lecteur avant d'exécuter une autre command sur la même connection. par exemple
reader.Close(); foreach (ssortingng key in MoviesList.Keys) { Console.WriteLine("MoviesList {0}, code {1} .", key, MoviesList[key]); // RAJOUTER DONNEES HORAIRES command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'"; //cmd.Parameters.AddWithValue("@code", MoviesList[key]); IT STOPS HERE. command.ExecuteNonQuery(); }
Votre syntaxe SQL pour l'instruction INSERT est incorrecte. Vous avez juste besoin de ça
queryssortingng= "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "')";
Le SqlCommand (command) est toujours occupé – vous ne pouvez pas le réutiliser pour l'instruction d'insertion. Vous devez ouvrir une nouvelle SqlConnection avec une nouvelle command SqlCommand. Bien que ce soit probablement plus propre si vous venez de déplacer votre foreach en dehors des requêtes d'origine en utilisant block, puisque vous ne faites reference qu'au dictionary en memory à ce moment-là.
Comme mentionné, votre instruction insert a également une clause where qui n'a pas de sens … avez-vous voulu dire que c'est une mise à jour?
Déposez la capture vide et vous verrez des messages d'exception qui vous faciliteront la vie.
// édite ton instruction select essaye ceci
SELECT DISTINCT Titre from infosHoraire where Salle in ('DOO','FOO','GOO') and Jour <='" + finDate + "'";