Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
ApeLcunChik
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 11
1

Обновление, вставка и удаление записей в SQL через DataGridView

04.04.2016, 01:46. Просмотров 1053. Ответов 10
Метки нет (Все метки)

Добрый вечер всем! Подскажите, пожалуйста, кого не затруднит, как решить проблему.
Из БД (MS SQL Server) запросом подцепляю к DataGridView поля из 3 таблиц. Все выводится корректно.
Вопрос: как обновить 2 поля в одной из этих таблиц, на основании данных из других таблиц?
Т.е. что-то типа:
SQL
1
2
3
4
5
6
7
UPDATE Tabel1
SET
     FirstId = (SELECT FieldId FROM Tabel2 WHERE Name = @Name),
     SecondId = (SELECT SecondId FROM Tabel3 WHERE Post = @Post),
     Fam = @Fam,
     Nam = @Nam
WHERE Id = @Id
Получится ли такое сделать?
Спасибо за помощь!

P.S.: MS SQL Server, C#. Данные в DataGridView выводятся хранимой процедурой.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2016, 01:46
Ответы с готовыми решениями:

Удаление/добавление/обновление строк в БД(Mysql) через dataGridView
Через процедуру заношу в dataGridView данные из таблицы: string sql = "call...

Обновление записей в datagridview
Есть две таблицы в access с одним числовым полем, скрни ниже. Можно ли сделать, чтобы из левой...

Обновление datagridview при добавление в БД новых записей
Здравствуйте. Сейчас у меня при загрузке приложения заполняется datagridview. В ходе работы через...

Удаление и обновление в DataGridView
Помогите пожалуйста. Создала две кнопки к DataGridView: button 1 -"Сохранить" и Button2 -...

Обновление БД SQL c dataGridView
Здравствуйте! проблема в следующем: при старте таблица выводится в dataGridView тут все хорошо....

10
wm_leviathan
196 / 198 / 69
Регистрация: 12.01.2011
Сообщений: 699
Завершенные тесты: 2
04.04.2016, 19:31 2
подобное делал на Entity Framework и даже писал тут, с кодом и прочими. Работало на ура. Но там сам framework все неплохо обрабатывал. Хз на голом sql сильно не заморачивался а делал через транзакцию и 2 запроса. Сначало обновляем подчиненную таблицу потом главную.
как пример:
SQL
1
2
3
4
5
6
7
8
9
BEGIN TRANSACTION WORK; 
UPDATE WorkDb.dbo.TPerson SET 
id_subdivision = @id_subdivision, id_profession = @id_profession, id_pol = @id_pol, tabnom = @tabnom, 
surname = @surname, first_name = @first_name, del_state = @del_stateP 
WHERE id_person = @id_person 
UPDATE WorkDb.dbo.TSize SET 
id_person = @id_person, heightOt = @heightOt, heightDo = @heightDo, del_state = @del_stateS
WHERE id_size = @id_size 
COMMIT WORK;
1
ApeLcunChik
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 11
04.04.2016, 22:14  [ТС] 3
Цитата Сообщение от wm_leviathan Посмотреть сообщение
подобное делал на Entity Framework и даже писал тут, с кодом и прочими. Работало на ура. Но там сам framework все неплохо обрабатывал. Хз на голом sql сильно не заморачивался а делал через транзакцию и 2 запроса. Сначало обновляем подчиненную таблицу потом главную.
как пример:
SQL
1
2
3
4
5
6
7
8
9
BEGIN TRANSACTION WORK; 
UPDATE WorkDb.dbo.TPerson SET 
id_subdivision = @id_subdivision, id_profession = @id_profession, id_pol = @id_pol, tabnom = @tabnom, 
surname = @surname, first_name = @first_name, del_state = @del_stateP 
WHERE id_person = @id_person 
UPDATE WorkDb.dbo.TSize SET 
id_person = @id_person, heightOt = @heightOt, heightDo = @heightDo, del_state = @del_stateS
WHERE id_size = @id_size 
COMMIT WORK;
Спасибо большое за Ваш ответ! Но мой вопрос был немного не про это, но я уже разобралась с Update. Спасибо!
P.S.: в продолжении темы - не подскажите, как вставить записи в DGV, в конец уже имеющихся, из списка List?

Добавлено через 39 минут
Цитата Сообщение от ApeLcunChik Посмотреть сообщение
Цитата Сообщение от wm_leviathan Посмотреть сообщение
Сообщение от wm_leviathan
подобное делал на Entity Framework и даже писал тут, с кодом и прочими. Работало на ура. Но там сам framework все неплохо обрабатывал. Хз на голом sql сильно не заморачивался а делал через транзакцию и 2 запроса. Сначало обновляем подчиненную таблицу потом главную.
как пример:
SQL
1
2
3
4
5
6
7
8
9
BEGIN TRANSACTION WORK; 
UPDATE WorkDb.dbo.TPerson SET 
id_subdivision = @id_subdivision, id_profession = @id_profession, id_pol = @id_pol, tabnom = @tabnom, 
surname = @surname, first_name = @first_name, del_state = @del_stateP 
WHERE id_person = @id_person 
UPDATE WorkDb.dbo.TSize SET 
id_person = @id_person, heightOt = @heightOt, heightDo = @heightDo, del_state = @del_stateS
WHERE id_size = @id_size 
COMMIT WORK;
Спасибо большое за Ваш ответ! Но мой вопрос был немного не про это, но я уже разобралась с Update. Спасибо!
P.S.: в продолжении темы - не подскажите, как вставить записи в DGV, в конец уже имеющихся, из списка List?
Извиняюсь, я похоже не заметила, что DGV всегда вставляет строки в конец? Если используется:
C#
1
dataGridView.Rows.Add
0
wm_leviathan
196 / 198 / 69
Регистрация: 12.01.2011
Сообщений: 699
Завершенные тесты: 2
04.04.2016, 22:35 4
Цитата Сообщение от ApeLcunChik Посмотреть сообщение
не подскажите, как вставить записи в DGV, в конец уже имеющихся
Ну смотрите, во первых грид служит всего лишь для отображения связного с ним источника данных. Вот его вам и надо редактировать. Зачастую я просто insert'ю данные запросами в базу а потом select'ом обновляю грид.
вот простой пример как это делать.
TestDB.rar
у меня там текстбоксы, в вашем случае циклом по listView будет.
2й вариант как это можно сделать, к примеру если открыть соединение с базой вытянуть данные в DataTable и отобразить их в dgv. Дальше вы из ListView добавляете данные в этот dataTable и вызываете у него метод Update. При этом соединение с базой должно быть открыто.
ЗЫ Если есть необходимость то завтра приведу и этот пример, сегодня уже голова не работает вырубаюсь.

Цитата Сообщение от ApeLcunChik Посмотреть сообщение
...всегда вставляет строки в конец?
если память не изменяет то да. Но там вроде по индексу еще можно вставлять т.е. не в конец.
0
ApeLcunChik
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 11
05.04.2016, 17:15  [ТС] 5
Уважаемый wm_leviathan! Еще немного помучаю Вас вопросом ))
У меня есть 2 таблицы: "Сотрудники" и "Должность". Чтобы избежать связи многие-ко-многим, я создала промежуточную таблицу "ДолжнСотр". И собственно, сейчас столкнулась с вопросом: как, при добавлении сотрудника и должности связать их?
Заранее спасибо за ответ!
0
wm_leviathan
196 / 198 / 69
Регистрация: 12.01.2011
Сообщений: 699
Завершенные тесты: 2
05.04.2016, 17:45 6
Цитата Сообщение от ApeLcunChik Посмотреть сообщение
Чтобы избежать связи многие-ко-многим
так не делайте такую связь.
По хорошему не может же быть у сотрудника много должностей (не берем в расчет врачей с кучей ставок )
примерный простой вид таблиц такой:
таблица должности: id_prof, name_prof
Таблица сотрудников: id_person, id_prof, name_person, и т.д. по сотруднику.
в таблице должностей делаете foreign_key и свзязываете 2 таблицы по id_prof. И все у вас проблем не будет.
Потом как завели справочник должностей, при добавлении нового сотрудника делаете к примеру comboBox с должностями и выбираете какую нужно.
примерно на картинках выглядит так:
Обновление, вставка и удаление записей в SQL через DataGridView

Обновление, вставка и удаление записей в SQL через DataGridView

так выглядит база и вчастности таблица сотрудников, как видите id_profession как раз foreign_key на таблицу с профессиями
Обновление, вставка и удаление записей в SQL через DataGridView

код я могу показать но он выведен весь в отдельные классы, придется порядком их описывать тут.
ЗЫ никаких промежуточных таблиц не надо, не городите ерунды.
0
ApeLcunChik
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 11
05.04.2016, 17:48  [ТС] 7
Цитата Сообщение от wm_leviathan Посмотреть сообщение
так не делайте такую связь.
По хорошему не может же быть у сотрудника много должностей (не берем в расчет врачей с кучей ставок )
У меня как раз таки врачи )
0
wm_leviathan
196 / 198 / 69
Регистрация: 12.01.2011
Сообщений: 699
Завершенные тесты: 2
05.04.2016, 17:51 8
и может быть у одного человека несколько должностей ?
0
ApeLcunChik
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 11
05.04.2016, 17:53  [ТС] 9
Цитата Сообщение от wm_leviathan Посмотреть сообщение
и может быть у одного человека несколько должностей ?
Да.
0
wm_leviathan
196 / 198 / 69
Регистрация: 12.01.2011
Сообщений: 699
Завершенные тесты: 2
05.04.2016, 18:14 10
Цитата Сообщение от ApeLcunChik Посмотреть сообщение
Чтобы избежать связи многие-ко-многим
тогда я этого не понимаю, либо вы избегаете связи мног ко мног либо нет. в вашем случаем связь мног ко мног зачем избегать ее ? в таком случае да нужна будет 3я таблицы со связями:
примерно так:
id_prof, name_prof - профы
id_person, name_person сотруд
id_rel, id_person, id_prof связи
Цитата Сообщение от ApeLcunChik Посмотреть сообщение
как, при добавлении сотрудника и должности связать их?
1)забили справочник сотрудников
2)после сохранения сотрудника получили его id (id должностей его мы уже знаем так как выбирали их присохранении)
3)полученные id-должностей и сотрудника сохраняем в таблицу "ДолжнСотр"
там будет примерно такой вид:
1 1 1
2 1 3
3 1 6
усе готово.
будет 2 запроса (ну или объеденить его можно в 1) и желательно это обернуть в транзакцию ибо если после сохранения сотрудника сбой какой будет то в 3ю таблицу Id не сядут
1
ApeLcunChik
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 11
05.04.2016, 20:46  [ТС] 11
Цитата Сообщение от wm_leviathan Посмотреть сообщение
тогда я этого не понимаю, либо вы избегаете связи мног ко мног либо нет. в вашем случаем связь мног ко мног зачем избегать ее ? в таком случае да нужна будет 3я таблицы со связями:
примерно так:
id_prof, name_prof - профы
id_person, name_person сотруд
id_rel, id_person, id_prof связи
Я может не правильно выразилась...под "избегать" я имела ввиду создание 3-ей таблицы.
P.S.: а поле "id_rel" играет какую-то роль в таблице? Я не против её добавить, просто интересно узнать ) и подскажите, пожалуйста, на какие поля нужно будет поставить ключ?
Цитата Сообщение от wm_leviathan Посмотреть сообщение
усе готово.
будет 2 запроса (ну или объеденить его можно в 1) и желательно это обернуть в транзакцию ибо если после сохранения сотрудника сбой какой будет то в 3ю таблицу Id не сядут
Спасибо большое за совет, попробую сделать как Вы сказали!
P.S.: чтобы удостовериться, что я Вас верно поняла - создать запрос с 2 insert'ами и повесить на кнопку сохранения Сотрудника?
0
05.04.2016, 20:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2016, 20:46

SQL Server CE - вставка большого количества записей - зависает программа
Здравствуйте, уважаемые! Столкнулся с неожиданной проблемой. По требованию заказчика база на...

Обновление БД sql после редактирования DataGridView
Доброго времени суток) Подскажите пожалуйста.... уже второй день бьюсь не могу найти ничего...

MySQL: не работает обновление и удаление записей. Найти ошибку в коде
Господа, немогу понять что делаю не так. Ткните пожалуйста поправкой в код. Инсёрт делаю так -...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru