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

Я хочу показать все книги выбранных писателей из списка отмеченных на диаграмме. Проблема в том, что мне нужно объединить два столбца, и это выдает исключение в строке 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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