exécuter plusieurs SqlCommand et ExecuteNonQuery

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 + "'";