System.InvalidOperationException: «Уже существует открытый DataReader, связанный с этой командой, который должен быть закрыт первым». - PullRequest
0 голосов
/ 12 октября 2018

ps: я пытался закрыть соединения и устройства чтения данных, но это не сработало, также пробовал предыдущие решения здесь, но все еще получал ошибку, я даже разделял соединения, и это не работало так же, как я пытаюсь сделатьздесь нужно прочитать идентификатор из таблицы с сервера sql и использовать этот идентификатор для поиска других данных в другой таблице, но это всегда дает мне закрытие соединения или проблему с данными

SqlConnection cnx = new SqlConnection("data source = . ; database = tnt ; integrated security = true ; MultipleActiveResultSets=true");
    SqlConnection cnx2 = new SqlConnection("data source = . ; database = tnt ; integrated security = true ; MultipleActiveResultSets=true");



        SqlCommand cmd = new SqlCommand("select matricule from inscription where numformation = @n",cnx);
        cmd.Parameters.AddWithValue("@n", comboBox2.Text);
        SqlDataReader dr = cmd.ExecuteReader();

        List<string> hawhaw = new List<string>();
        while (dr.Read())
        {
            hawhaw.Add(dr[0].ToString());
        }

        cmd.Dispose();

        cnx2.Close();

        cnx2.Open();
        SqlCommand cmd2 = new SqlCommand("select * from person where matricule = @m", cnx2);
        foreach (var item in hawhaw)
        {
            cmd2.Parameters.Clear();
            cmd2.Parameters.AddWithValue("@m", item);
            SqlDataReader dr2 = cmd2.ExecuteReader();

            if (dr2.Read())
            {
                MessageBox.Show(dr2[0].ToString());
            }
        }

        cmd2.Dispose();
        cnx.Close();

1 Ответ

0 голосов
/ 12 октября 2018

самое главное, вы можете управлять утилизации и закрытия операций.Для этого вы должны использовать using и выполнять эту работу от вашего имени.

   List<string> hawhaw = new List<string>();

            using (SqlConnection connection = new SqlConnection("data source = . ; database = tnt ; integrated security = true ; MultipleActiveResultSets=true"))
            {
                connection.Open();
                using (SqlCommand cmd = new SqlCommand("select matricule from inscription where numformation = @n", connection))
                {
                    cmd.Parameters.AddWithValue("@n", comboBox2.Text);
                    SqlDataReader dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                        hawhaw.Add(dr[0].ToString());
                    }

                }
            }



            using (var connection = new SqlConnection("data source = . ; database = tnt ; integrated security = true ; MultipleActiveResultSets=true"))
            {
                connection.Open();

                foreach (var item in hawhaw)
                {
                    using (var cmd2 = new SqlCommand("select * from person where matricule = @m", connection))
                    {
                        cmd2.Parameters.AddWithValue("@m", item);
                        var dr2 = cmd2.ExecuteReader();
                        if (dr2.Read())
                        {
                            MessageBox.Show(dr2[0].ToString());
                        }
                    }

                }
            }
...