2

我试图在同一个连接中运行多个 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();


                }
4

6 回答 6

2

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

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

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

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

reader.Close();
于 2013-07-31T03:45:01.143 回答
1

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

command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'";
于 2013-07-31T03:54:50.340 回答
1

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

 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();


                }
于 2013-07-31T04:06:44.763 回答
0

INSERT 语句的 SQL 语法不好。你只需要这个

querystring= "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "')";
于 2013-07-31T03:48:27.670 回答
0

SqlCommand(命令)仍然很忙——您不能将它重用于插入语句。您需要使用新的 SqlCommand 打开一个新的 SqlConnection。尽管如果您只是使用块将 foreach 移到原始查询之外,它可能会更干净,因为此时您只引用内存中的字典。

如前所述,您的插入语句也有一个没有意义的 where 子句……您的意思是不是要成为更新语句?

放下空的 catch,您会看到一些异常消息,这将使您的生活更轻松。

于 2013-07-31T04:04:38.580 回答
0

//编辑你的选择语句试试这个

  SELECT DISTINCT Titre from infosHoraire where Salle in ('DOO','FOO','GOO') and Jour <='" + finDate + "'";
于 2013-07-31T04:37:39.597 回答