Как объединить два столбца в один?

Я хочу показать все книги выбранных писателей из списка отмеченных на диаграмме. Проблема в том, что мне нужно объединить два столбца, и это выдает исключение в строке da.Fill(dt1): Недопустимое имя столбца ime_prezime

            conn.Open();

            //chart1.Series.Clear();
            //string predmeti = "";
            string result = "";
            string[] sAutori;
            foreach (object itemChecked in checkedListBox1.CheckedItems)
            {
                DataRowView castedItem = itemChecked as DataRowView;
                string companyName = (string)castedItem["ime_prezime"];
                //int? id = castedItem["autor_id"];
                result += $@"'({companyName})'" + ",";
            }
            
            if (checkedListBox1.CheckedItems.Count < 2)
            {
                MessageBox.Show("Morate izabrati bar dva pisca!");
            }
            else
            {
                result = result.Substring(0, result.Length - 1);
                //string result = predmeti.Substring(0, predmeti.Length - 1);
                cmd1.CommandText = $@"SELECT a.ime + ' ' + a.prezime AS ime_prezime, COUNT(b.knjiga_id) FROM AUTORI AS a JOIN autori_izdanja AS b ON a.autor_id = b.autor_id WHERE ime_prezime IN ({result}) GROUP BY a.ime";
                da.SelectCommand = cmd1;
                da.Fill(dt1);
                try {
                    foreach (DataRow row in dt1.Rows)
                    {
                        chart1.Series[0].Points.AddXY(row[0], row[1]);
                    }
                    label2.Text = result;
                    button1.Enabled = false;
                }
                catch (Exception g) {

                    MessageBox.Show(g.Message);
                }
                
            }
            conn.Close();

Может кто-нибудь решить это, пожалуйста...

В вашем операторе выбора, в котором вам нужно заменить ime_prezime на a.prezime, тогда все должно работать. В каком случае вам нужно использовать исходное имя столбца вместо псевдонима столбца.

Damini Suthar 17.05.2022 02:33

Теперь он выдает другое исключение

Stefan Milanović 17.05.2022 02:53

в чем ошибка?

Damini Suthar 17.05.2022 02:56

Это запрос $@"SELECT a.ime + ' ' + a.prezime AS ime_prezime, COUNT(b.knjiga_id) FROM AUTORI AS a JOIN autori_izdanja AS b ON a.autor_id = b.autor_id WHERE a.prezime IN ({sAutori}) GROUP BY a.ime", и теперь он выдает: > 'Неверный синтаксис рядом с 'adad'».

Stefan Milanović 17.05.2022 02:59

Нужны ли изменения в этой части? string result = ""; string sAutori; foreach (object itemChecked in checkedListBox1.CheckedItems) { DataRowView castedItem = itemChecked as DataRowView; string companyName = (string)castedItem["ime_prezime"]; //int? id = castedItem["autor_id"]; result += companyName + ", "; }

Stefan Milanović 17.05.2022 03:01

Могу ли я иметь ваши разногласия или что-то в этом роде? Мне очень нужно это, пожалуйста... Я учусь в старшей школе, и мне это нужно через 5 часов :D

Stefan Milanović 17.05.2022 03:10

Это какая-то ошибка в выводе, например, он неправильно разделен или что-то в этом роде.

Stefan Milanović 17.05.2022 03:22

Например, когда я выбираю первые два, sAutori получает значение Александр Пушкин, Эмили Бронте и говорит, что у него синтаксическая ошибка после Пушкина. Также выдает ошибку в строке da.Fill(dt1);

Stefan Milanović 17.05.2022 03:29

Ошибка для последнего , из цикла for, добавляющего строку результата. Вы можете удалить последний ,, проверив if (result != string.Empty) {result.RemoveLast(",");} после цикла foreach

Damini Suthar 17.05.2022 03:29

Я сделал это так>: sAutori = result.Substring(0, result.Length - 1); Я также изменил строку result += companyName + ",";

Stefan Milanović 17.05.2022 03:31

Вам не нужно сохранять это после в sAutori. просто используйте результат

Damini Suthar 17.05.2022 03:34

Все еще та же ошибка, что и последняя, ​​которую я упомянул 3 комментария выше. Могу ли я отправить вам полный код куда-нибудь?

Stefan Milanović 17.05.2022 03:38
result += "'"+companyName+"'" + ","; Добавить '
Damini Suthar 17.05.2022 03:44

Теперь это исключение без запроса на редактирование: > Столбец «AUTORI.prezime» недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Stefan Milanović 17.05.2022 03:48

Мне нужно показать писателей на графике, который я выбираю в checkedListBox. Проблема в том, что они упорядочены ime_prezime в checkedListBox, поэтому я не могу просто использовать их идентификатор в этом случае.

Stefan Milanović 17.05.2022 03:52

Если у вас есть другая идея, как это сделать, я открыт для этого

Stefan Milanović 17.05.2022 04:02

В группе вместо a.ime используйте b.knjiga_id ,ime_prezime добавьте SELECT a.ime + ' ' + a.prezime AS ime_prezime, COUNT(b.knjiga_id) FROM AUTORI AS a JOIN autori_izdanja AS b ON a.autor_id = b.autor_id WHERE a.prezime IN ({sAutori}) GROUP BY ime_prezime . См. редактирование одного

Damini Suthar 17.05.2022 04:03

Теперь снова в da.Fill(dt 1) выдает исключение> Неверное имя столбца 'ime prezime'

Stefan Milanović 17.05.2022 04:08
SELECT a.ime + ' ' + a.prezime AS ime_prezime, COUNT(b.knjiga_id) FROM AUTORI AS a JOIN autori_izdanja AS b ON a.autor_id = b.autor_id WHERE a.prezime IN ({result}) GROUP BY a.ime , a.prezime . См. редактирование одного
Damini Suthar 17.05.2022 04:12

Теперь у него нет исключений, но он ничего не пишет на графике.

Stefan Milanović 17.05.2022 04:16

Если вы можете отлаживать, проверьте значения dataTable. Я думаю, этот пример поможет вам в дальнейшем stackoverflow.com/questions/11556935/…

Damini Suthar 17.05.2022 04:24

Хорошо переменная result возвращает всех писателей, которые я выбираю, но не устанавливает никаких строк в таблице.

Stefan Milanović 17.05.2022 04:32

Есть ли в вашей таблице данные с этими выборками? Отладьте код, получите SQL-запрос и запустите SQL.

Damini Suthar 17.05.2022 04:37

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

Damini Suthar 17.05.2022 04:38

Да могу конечно. Проблема в том, что он снова выдает исключение, когда вы пишете ime_prezime после where

Stefan Milanović 17.05.2022 04:41

Я добавил a.ime + ' ' + a.prezime в Где. Проверьте с помощью этого запроса. Это может дать вам некоторые данные.

Damini Suthar 17.05.2022 04:46
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
2
26
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
           conn.Open();

            //chart1.Series.Clear();
            //string predmeti = "";
            string result = "";
            string[] sAutori;
            foreach (object itemChecked in checkedListBox1.CheckedItems)
            {
                DataRowView castedItem = itemChecked as DataRowView;
                string companyName = (string)castedItem["ime_prezime"];
                //int? id = castedItem["autor_id"];
                result += "'"+companyName+"'" + ",";
            }
            
            if (checkedListBox1.CheckedItems.Count < 2)
            {
                MessageBox.Show("Morate izabrati bar dva pisca!");
            }
            else
            {
                if(result != string.Empty ){
                    result = result.Substring(0, result.Length - 1);
                }
                //string result = predmeti.Substring(0, predmeti.Length - 1);
                cmd1.CommandText = $@"SELECT a.ime + ' ' + a.prezime AS ime_prezime, COUNT(b.knjiga_id) FROM AUTORI AS a JOIN autori_izdanja AS b ON a.autor_id = b.autor_id WHERE a.ime + ' ' + a.prezime IN ({result}) GROUP BY a.ime  + ' ' + a.prezime";
                da.SelectCommand = cmd1;
                da.Fill(dt1);
                try {
                    foreach (DataRow row in dt1.Rows)
                    {
                        chart1.Series[0].Points.AddXY(row[0], row[1]);
                    }
                    label2.Text = result;
                    button1.Enabled = false;
                }
                catch (Exception g) {

                    MessageBox.Show(g.Message);
                }
                
            }

Просто измените CommandText на $@"SELECT a.ime + ' ' + a.prezime AS ime_prezime, COUNT(b.knjiga_id) FROM AUTORI AS a JOIN autori_izdanja AS b ON a.autor_id = b.autor_id WHERE a.ime + ' ' + a.prezime IN ({result}) GROUP BY a.ime + ' ' + a.prezime", и он отлично работает.

Stefan Milanović 17.05.2022 05:09
        SqlCommand cmd;
        SqlCommand cmd1;
        SqlDataAdapter da;
        DataTable dt;
        DataTable dt1;

        void Connection()
        {
            conn = new SqlConnection();
            conn.ConnectionString = @"Data Source=DESKTOP-QEDL8JA\SQLEXPRESS;Initial Catalog=EvidencijaKnjiga;Integrated Security=True;";
            cmd = new SqlCommand();
            cmd1 = new SqlCommand();
            cmd.Connection = conn;
            cmd1.Connection = conn;
            dt = new DataTable();
            dt1 = new DataTable();
            da = new SqlDataAdapter();
        }

        void stats()
        {
            Connection();
            //string select = "SELECT";
        }
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            Connection();
            cmd.CommandText = "SELECT autor_id, ime + ' ' + prezime AS ime_prezime FROM autori ORDER BY ime_prezime";
            da.SelectCommand = cmd;
            da.Fill(dt);
            checkedListBox1.DataSource = dt;
            checkedListBox1.DisplayMember = "ime_prezime";
            checkedListBox1.ValueMember = "autor_id";
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            chart1.Series[0].Points.Clear();
            button1.Enabled = true;
            //chart1.Series.Clear();
            //chart1.ChartAreas.Clear();
            checkedListBox1.ClearSelected();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Connection();
            conn.Open();
            /*cmd.CommandText = "SELECT autor_id, ime + ' ' + prezime AS ime_prezime FROM autori ORDER BY ime_prezime";
            da.SelectCommand = cmd;
            da.Fill(dt);*/
            //chart1.Series.Clear();
            //string predmeti = "";
            string result = "";
            //string sAutori;
            foreach (object itemChecked in checkedListBox1.CheckedItems)
            {
                DataRowView castedItem = itemChecked as DataRowView;
                string companyName = (string)castedItem["ime_prezime"];
                //int? id = castedItem["autor_id"];
                result += "'" + companyName + "'" + ",";
            }

            if (checkedListBox1.CheckedItems.Count < 2)
            {
                MessageBox.Show("Morate izabrati bar dva pisca!");
            }
            else
            {
                if (result != string.Empty)
                {
                    result = result.Substring(0, result.Length - 1);
                }
                //string result = predmeti.Substring(0, predmeti.Length - 1);
                cmd1.CommandText = $@"SELECT a.ime + ' ' + a.prezime AS ime_prezime, COUNT(b.knjiga_id) FROM AUTORI AS a JOIN autori_izdanja AS b ON a.autor_id = b.autor_id WHERE a.ime + ' ' + a.prezime IN ({result}) GROUP BY a.ime + ' ' + a.prezime";
                da.SelectCommand = cmd1;
                da.Fill(dt1);
                //dataGridView1.DataSource = dt1;
                try
                {
                    foreach (DataRow row in dt1.Rows)
                    {
                        chart1.Series[0].Points.AddXY(row[0], row[1]);
                    }
                    label2.Text = result;
                    button1.Enabled = false;
                }
                catch (Exception g)
                {
                    MessageBox.Show(g.Message);
                }

            }
            conn.Close();
        }```
This is the final code. I just ujusted some things and it worked. Thank you so much on help :D

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать добавьте дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 17.05.2022 08:56

Другие вопросы по теме