Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 10
SQLite

Insert data into table(from select) using 2 DataGridView

04.09.2017, 09:25. Показов 1050. Ответов 3

Студворк — интернет-сервис помощи студентам
Всем привет

Ребята, помогите разобраться где у меня ошибка. 2 DataGridView, в первом DGV я храню Услуги во втором Cписок Заказов. Когда я нажимаю кнопку «Сохранить», этот код выполняет:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void insert_sales_list()
    {
        conn.Open();
        foreach (DataGridViewRow row in dgvService.SelectedRows)
        {               
            SQLiteCommand cmd = new SQLiteCommand("insert into sales_list (sales_created_date, sales_created_name, emp_name, cust_phone, cust_name, planned_date, planned_time, service_name, discount, price, order_id) values (@ocd, @ocn, @emp, @c_phone, @c_name, @p_date, @p_time, @sn, @disc, @price, @o_id)", conn);             
            cmd.Parameters.AddWithValue("@ocd", DateTime.Now);
            cmd.Parameters.AddWithValue("@ocn", lblLoginUser.Text);
            cmd.Parameters.AddWithValue("@emp", dgvOrderList.CurrentRow.Cells[1].Value.ToString());
            cmd.Parameters.AddWithValue("@c_phone", dgvOrderList.CurrentRow.Cells[2].Value.ToString());
            cmd.Parameters.AddWithValue("@c_name", dgvOrderList.CurrentRow.Cells[3].Value.ToString());
            cmd.Parameters.AddWithValue("@p_date", dgvOrderList.CurrentRow.Cells[5].Value);
            cmd.Parameters.AddWithValue("@p_time", dgvOrderList.CurrentRow.Cells[6].Value.ToString());
            cmd.Parameters.AddWithValue("@sn", row.Cells[0].Value.ToString());
            cmd.Parameters.AddWithValue("@disc", dgvOrderList.CurrentRow.Cells[4].Value.ToString());
            cmd.Parameters.AddWithValue("@price", row.Cells[1].Value.ToString());
            cmd.Parameters.AddWithValue("@o_id", dgvOrderList.CurrentRow.Cells["order id"].Value);
            cmd.ExecuteNonQuery();
 
            string sql = "update order_list set status = 'Saved' where id = '" + dgvOrderList.CurrentRow.Cells["order id"].Value + "'";
            cmd = new SQLiteCommand(sql, conn);
            cmd.ExecuteNonQuery();
        }
        conn.Close();
Тут все просто, я вставляю данные из Списка Заказов в Список Продаж, пользователь выбирает сервис или сервисы из DataGridView.Service, он может использовать любую услугу из списка. Этот код работает великолепно.

Далее. У меня есть еще одна табличка, в которой у каждой Услуги есть свои Материалы, например - Мужская Стрижка(Услуга) содержит мыло, шампунь и салфетку по нормам. И мне нужно вставить эти данные в таблицу SalesMaterials. И я думаю, что код неправильный, пожалуйста, помогите мне найти эту ошибку? код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
public void insert_sales_materials()
    {
        conn.Open();
        foreach (DataGridViewRow row in dgvService.SelectedRows)
        {               
            string Query = "insert into sales_list_materials(order_id, material_id, norma, created_name, creation_date) " +
                "values( select '" + dgvOrderList.CurrentRow.Cells["order id"].Value + "', a.material_id, a.norma, '" + lblLoginUser.Text + "', '" + DateTime.Now + "'  from service_materials a where a.service_id = '" + row.Cells[2].Value + "')";
            SQLiteCommand cmd = new SQLiteCommand(Query, conn);
            cmd.ExecuteNonQuery();
        }
        conn.Close();
    }
Ошибка:

Additional information: SQLite error

near "select": syntax error

P.S. использую C# windows Forms и SQLite

Добавлено через 10 минут
Все я разобрался ))
тупая ошибка, при insert из select не используйте слово VALUES

Правильный код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
public void insert_sales_materials()
        {
            conn.Open();
            foreach (DataGridViewRow row in dgvService.SelectedRows)
            {               
                string Query = "insert into sales_list_materials(order_id, material_id, norma, created_name, creation_date) " +
                    "select '" + dgvOrderList.CurrentRow.Cells["номер заказа"].Value + "', a.material_id, a.norma, '" + lblLoginUser.Text + "', '" + DateTime.Now + "'  from service_materials a where a.service_id = '" + row.Cells[2].Value + "'";
                SQLiteCommand cmd = new SQLiteCommand(Query, conn);
                cmd.ExecuteNonQuery();
            }
            conn.Close();
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2017, 09:25
Ответы с готовыми решениями:

select s odnoi table, and insert v drygyjy table
privet! mne nado sdelat backup s ASP.NET, kogda stirayt DB, no na vsaki slychay mne nado soxranit ety table. backup ne poxodit, mne nado...

insert into table values (select....
Здравствуйте, скажите, как заставить работать следующий запрос: insert into tg3.dbo.tg3hour values (getdate(),select avg() from ..) ...

Insert MD5 into table
Есть база, в ней таблица account, в которой поле password. Делаю персист сущности этой таблицы. Пароль в чистом виде. Где-то прочитал, что...

3
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
04.09.2017, 09:27
в Глаза сразу кидаются 2 огромных ошибки.
1. Зачем Вы открываете соединение, если ничего туда не вносите? Ну т.е. почему сначала не произвести поиск по таблице (а никак не гриду, как у Вас), потом открыть соединение и выполнить команду? Зачем лишний раз его держать открытым-то, мешая всем, и себе в том числе? - но это наименьшее из бед.
2. Вот в первом запросе на update - у Вас хоть как-то нормально было прописано, используя параметризированный запрос, а потом началось... - опять в запрос полезли какие-то value (и хз какого оно типа, правильно? - хоть строка, хоть число... - оно же должно волшебным образом само всё определить, подставить, а программисту не стоит себя утруждать думать о таких мелочах).
Ну и самое главное - не работайте напрямую с контролами. Никогда. Быстродействие уменьшается в тысячи раз. Потом начнете пихать обработку контролов в потоки (где-то вычитав, что это должно увеличить скорость обработки), а скорость и безопасность упадет еще больше.
Суть в том, что в Вашем случае - обработайте таблицу, которая прибиндена к гриду, выдергивайте все значения в строгой типизации - пихайте их в параметры - и потом отправляйте запросом в БД.
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 10
04.09.2017, 10:41  [ТС]
большое спасибо за внимание hoolygan
это мой первый проект и шишек как говорится понахватаюсь
сейчас я в большей мере занимаюсь тем, что попросту открываю для себя c# WindowsForms, что я могу и что может предложить с#
и что такое контролы? я не в курсе(
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
04.09.2017, 11:49
контрол - это собственно инструмент взаимодействия между данными (что в программе) и пользователем, т.е. простыми словами - интерфейсная часть программы. В Вашем случае гриды, комбобоксы, текстбоксы - это всё контролы.
Они отображают значения, что находятся в полях/свойствах Ваших объектов (например, классов).
Так вот - если учились работать в консольке - то там Вы работали именно с полями, вот тут тоже - работайте с сущностями внутри программы, а интерфейс нужно использовать только для взаимодействия с пользователем, и никак не для вычислений.
Для начала - почитайте вот тут - очень много будет полезной информации, и собрана как раз вместе.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.09.2017, 11:49
Помогаю со студенческими работами здесь

insert decimal into table
Здравствуйте. Подскажите, пожалуйста, как вставить decimal с помощью оператора insert в MS SQL Server 2008? Я пробую так: create table...

Insert into table из другой таблици
Здравствуйте! Не могу понять как из одной таблици вставить данные в другую: у меня есть пустая таблица в которой 6 столбцов, в нее надо...

Присваивание Компоненту Id В Data Table
Здравствуйте, может кто подсказать почему в Repeat добавляется к id объекта index name а в data table нет, вот код: <?xml...

Ajax jquery table data
Доброго дня, вопрос у меня такой, я имею таблицу получаемую из результатов запроса ajax таблица появляется, и даже данные добавляются в...

Data Table И Link: Ссылки На Бд
всем привет! Только начал изучать xPage. Есть бд в которой открывается xPage при обращении к серверу из браузера. В этой бд есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru