Возникли проблемы с C # и MySQL - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь сделать небольшое настольное приложение, чтобы сделать списки игроков на моем игровом сервере более простыми. Я сталкиваюсь с некоторыми проблемами. Вот немного кода ...

       private void identityCombo_SelectedIndexChanged(object sender, EventArgs e)
    {

        if(connection.State == ConnectionState.Closed)
        {
            connection.Open();
        }

        jobsCombo.Enabled = true;
        gradesCombo.Enabled = true;
        groupCombo.Enabled = true;

        String query = "SELECT * FROM users WHERE identifier=@id";
        MySqlCommand cmd = new MySqlCommand(query, connection);

        cmd.Parameters.AddWithValue("@id", identityCombo.SelectedItem);

         MySqlDataReader reader = cmd.ExecuteReader();

        groupCombo.Enabled = true;

        while (reader.Read())
        {
            steamNameBox.Text = reader["name"].ToString();
            jobsCombo.SelectedIndex = jobsCombo.FindString(reader["job"].ToString());
            cashBox.Text = "$" + String.Format("{0:n0}", reader["money"].ToString());
            bankBox.Text = "$" + String.Format("{0:n0}", reader["bank"].ToString());
        }

        steamNameBox.Visible = true;
        steamNameLbl.Visible = true;
        cashLbl.Visible = true;
        bankLbl.Visible = true;
        bankBox.Visible = true;
        cashBox.Visible = true;
        bankLbl.Visible = true;
        groupLbl.Visible = true;
        groupCombo.Visible = true;
        phoneNumBox.Visible = true;
        phoneNumLbl.Visible = true;
        esxLbl.Visible = true;
        jobLbl.Visible = true;
        gradesLbl.Visible = true;
        jobsCombo.Visible = true;
        gradesCombo.Visible = true;
        updateInfoBtn.Visible = true;
    }

Я пытаюсь сделать так, чтобы у меня была система входа в систему (работает отлично, проблем нет), но затем она вызывает другое меню. На сервере вы можете иметь несколько идентификаторов. У меня есть способ выбрать их, и все просто отлично.

Вот моя проблема:

       while (reader.Read())
        {
            steamNameBox.Text = reader["name"].ToString();
            jobsCombo.SelectedIndex = jobsCombo.FindString(reader["job"].ToString());
            cashBox.Text = "$" + String.Format("{0:n0}", reader["money"].ToString());
            bankBox.Text = "$" + String.Format("{0:n0}", reader["bank"].ToString());
        }

Я изменяю "jobsCombo.SelectedIndex", который вызывает событие, которое я настроил, которыйзагрузит «оценки заданий» (ранги) на основе выбранного задания.

    private void jobsCombo_SelectedIndexChanged(object sender, EventArgs e)
    {
        loadJobGrades(jobsCombo.SelectedItem.ToString());
    }

Вот изображение интерфейса для более подробной информации.

enter image description here

Вся информация процедурно извлекается из базы данных, задание автоматически выбирается из ComboBox слева на основе того, что они имеют в БД. Хорошо, проблема - при изменении выбора «работа», он должен заполнить ряды работ для него справа, но это не так.

        private void loadJobGrades(String job)
    {

        String query = "SELECT * FROM job_grades WHERE job_name=@job";
        MySqlCommand cmd = new MySqlCommand(query, connection);

        cmd.Parameters.AddWithValue("@job", job);

        MySqlDataReader reader = cmd.ExecuteReader();

        MessageBox.Show("1");
        while (reader.Read())
        {
            gradesCombo.Items.Add(reader["label"]);
            MessageBox.Show("2");
        }
    }
        private void jobsCombo_SelectedIndexChanged(object sender, EventArgs e)
    {
        loadJobGrades(jobsCombo.SelectedItem.ToString());
    }

Второй раздел кода должен загружать оценки/ ранжируется на основе выбранного в настоящий момент окна «задание».

Проблема с первым кодом заключается в том, что Мне нужно создать / запустить новое средство чтения, что является проблемой . Я получаю сообщение «Уже есть открытый DataReader, связанный с этим соединением», потому что он запускается из события, которое также вызывается заполнением поля со списком.

Я пытался выяснить это в течение 10 часов, пожалуйстапомощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...