2

同じ接続で複数の SqlCommand を実行しようとしていますが、何らかの理由でプログラムが 2 番目で停止します。

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

ムービーリストは

  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

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

//selectステートメントを編集してこれを試してください

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

SqlCommand (コマンド) はまだビジーです。insert ステートメントに再利用することはできません。新しい SqlCommand で新しい SqlConnection を開く必要があります。ブロックを使用して元のクエリの外に foreach を移動した場合は、おそらくよりクリーンになりますが、その時点ではインメモリ ディクショナリのみを参照しているためです。

前述のように、insert ステートメントには、意味をなさない where 句もあります...おそらく update ステートメントであることを意味していましたか?

空のキャッチをドロップすると、いくつかの例外メッセージが表示されるので、作業がずっと楽になります。

于 2013-07-31T04:04:38.580 に答える