运行多个SqlCommand和ExecuteNonQuery

时间:2013-07-31 03:38:48

标签: c# sql sql-server sqlcommand

我试图在同一个连接中运行多个SqlCommand,但由于某种原因,程序将在第二个停止

command.ExecuteNonQuery();

这是我的代码:

  string queryString = "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.ConnectionStrings["ConsoleXMLtoDB"].ConnectionString))
        {
            SqlCommand command = new SqlCommand(queryString, connection);
            connection.Open();
            SqlDataReader reader = command.ExecuteReader();

            try
            {

                // on remplit le dico
                while (reader.Read())
                {
                    MoviesList.Add(reader[0].ToString(), "0");
                    searchCode(reader[0].ToString(), MoviesList);
                    //Console.WriteLine(" On rajoute le code {0}", MoviesList[reader[0].ToString()]);
                }
                reader.NextResult();
                while (reader.Read())
                {
                    if (!MoviesList.ContainsKey(reader[0].ToString()))
                    {
                        MoviesList.Add(reader[0].ToString(), "0");
                        searchCode(reader[0].ToString(), MoviesList);
                    }

                }
                reader.NextResult();
                while (reader.Read())
                {
                    if (!MoviesList.ContainsKey(reader[0].ToString()))
                    {
                        MoviesList.Add(reader[0].ToString(), "0");
                    }
                }

                foreach (string 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是

  Dictionary<string, string>

我无法真正找到问题的来源。

如果删除它,它将正常工作:

  foreach (string key in MoviesList.Keys)
                {
                    //literaltest.Text += "<br/> dictionnaire " + 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();


                }

6 个答案:

答案 0 :(得分:2)

编辑:尝试在捕获器上放置一个断点,看看是否有错误。

  catch (Exception e)
        {
            //Console.WriteLine("{0} Exception caught.", e);
        }

将鼠标悬停在e上,您应该能够看到错误消息。然后粘贴在这里。它可能是您的查询导致问题而不是命令对象

编辑。 reader对象仍在运行,这限制了您再次使用命令对象。在尝试执行下一个命令之前先关闭阅读器

reader.Close();

答案 1 :(得分:1)

从以下where查询中删除insert条件

command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'";

答案 2 :(得分:1)

您用于读取记录的SQLDataReader仍处于打开状态并使用该连接。在同一连接上执行另一个命令之前,需要关闭该读取器。 e.g。

 reader.Close();
foreach (string 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();


                }

答案 3 :(得分:0)

INSERT语句的SQL语法错误。你只需要这个

querystring= "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "')";

答案 4 :(得分:0)

SqlCommand(命令)仍然很忙 - 你不能将它重用于insert语句。您需要使用新的SqlCommand打开一个新的SqlConnection。虽然如果你只是使用块将foreach移到原始查询之外,它可能会更清晰,因为你只是在那时引用了内存字典。

如上所述,你的insert语句也有一个没有意义的where子句......你是否意味着要成为一个更新语句?

删除空的捕获,你会看到一些异常消息,这将使你的生活更轻松。

答案 5 :(得分:0)

//编辑你的select语句试试这个

  SELECT DISTINCT Titre from infosHoraire where Salle in ('DOO','FOO','GOO') and Jour <='" + finDate + "'";