![]() |
|
Модераторы: gambit |
![]()
|
|
| MFSham |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: нет Всего: 3 |
Есть типизированный DataSet. В DataSet загружено несколько взаимосвязных таблиц. Нужно обновить(сохранить в БД) одну таблицу. БД - Access.
Насколько я понял CommandBuilder здесь не проходит, т.к. таблица взаимосвязная. И тут сразу у меня возникает пару вопросов: 1. Если я использую типизированный DataSet, значит ли это, что для сохранения нужно использовать TableAdapter типизированной таблицы? 2. Если да, то каким образом(через какие методы) обновить таблицу в БД? 3. Если можно обойтись и без этого, то используя обычный TableAdapter через метод UpdateCommand можно ли добиться обновления? Как я не пытаюсь сохранить, никак не получается :( --------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
MFSham,
Приветствую.
Подожди немного сейчас кое-что сделаю и скину примерчик. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| MFSham |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: нет Всего: 3 |
Жду с нетерпением
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
MFSham,
Вот нашел у себя примерчик на VB давно делал. Так выглядит ДатаСет в дизайнере, не беда что две таблицы можно и больше прикрутить. ![]() А так выглядит форма в дизайнере, там внизу контролы видны. ![]() А тут собственно код формы
Добавлено через 14 минут и 56 секунд Обрати внимание что для каждой таблицы вызывается свой BindingSource с методом EndEdit() А потом свой TableAdapter с методом Update и соответствующим параметром Me.CustomerOrdersDataSet.Customer (в данном случае указана таблица клиентов) Да и в событии Form2_Load обрати внимание на последовательность выполнения методов Fill для ДатаСет. Таблицы связанны и порядок выполнения критичен. Сначала дочерние таблицы потом родитель. Если наоборот, то ничего не увидишь в гриде(например) -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| MFSham |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: нет Всего: 3 |
У меня нету BindingSource'ов.
Вот кусок кода:
Вот собственно и все. У меня есть схема БД, а все остальное я ручками делаю. Можно, конечно, перед сохранением в БД создавать BindingSource, может чего и получится. Но думаю это не лучший выход. Присоединённый файл ( Кол-во скачиваний: 13 )
schema.JPG 43,70 Kb--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
|||
|
||||
| thomas |
|
||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
MFSham,
Привет.
Я подумал, после того как ты написал
что ты работаешь в дизайнере. А при таком подходе студия сама генерит код и добавляет контролы на форму. Ладно проехали. Что касается твоего кода, то - что делает первый метод private void FillDataSet(OleDbConnection con) понятно. Ты создаешь таблицу в ДатаСет и заполняешь её выбранными из БД данными. единственное что добавил бы, вот здесь dbAdapter.Fill(this.DS) не плохо бы явно указать имя таблицы в ДатаСет. Т.е. пишем dbAdapter.Fill(this.DS, "имя_таблички"). - а вот что делает твой второй метод public void UpdateTimeTable(List<string> subjList, int ClassID, int DayID) , я не совсем "вьехал в тему". На входе он получает в качестве параметров лист и два ID. Далее ты обявил две локальные переменные и присваиваешь им значения в цикле. Тоже в принципе понятно. А вот это
совсем не понятно. Что ты здесь должен сделать с данными в таблице ДатаСет? Добавить строки или в имеющихся строках поменять значения SubjectID для строк с заданными значениями DayID, ClassID, TimeID? Исходя из структуры БД(ДС) в таблице TimeTable хранятся записи о в какой день в какое время какой класс что-то сделал с субьектом. Ты что хочешь менять субьекты? Но как я понимаю эта таблица содержит историю того что происходило. Ладно, даже если тебе необходимо менять субьект то делай это методами редактирования записей(строк) в таблице ДатаСет. Т.е. сначала редактируешь значение row["SubjectID"] = новое значение(для строки с соответствующими значениями DayID, ClassID, TimeID), а потом когда все отредактировал сохраняй эти изменения в БД вызывая соответствующий метод для ДатаАдаптера (DataAdapter.Update(DataSet)). Посмотри вот эту статью, почитай тут, а так же это и вот это. Здается мне, что там ты найдешь решение. Это сообщение отредактировал(а) thomas - 6.11.2007, 13:01 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||
|
|||||||
| MFSham |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: нет Всего: 3 |
thomas, привет.
А теперь мне таблицу TimeTable надо обновить в БД, после обновления в DataSet'e. Думаю понятно) Причем я изменяю только одну таблицу в DataSet'e(TimeTable), остальные даже не трогаю, просто при необходимости беру оттуда данные.
Ссылки классные, почитал. Но че-то у меня, как не пытался аналогично сделать, не вышло( Буду пытаться дальше... --------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
||||||
|
|||||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
MFSham,
К ДатаСет не возможно выполнить sql-запрос по определению. Это не база данных. Я вижу, только одно решение: находить строку в таблице датасет в которой присутствуют заданные значения DayID, ClassID, TimeID и редактировать значение поля SubjectID этой строки.
По другому ни как. Кстати что ДатаАдаптер, что ТаблеАдаптер оба служат для выполнения манипуляцый с данными между базой данных и датасетом. И ничего не делают для манипуляйций с данными ВНУТРИ датасета. Это важно понимать. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| MFSham |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: нет Всего: 3 |
thomas,
И это прекрасно понятно)) У меня в том то и проблема, что не могу обновить данные в самой БД используя TableAdapter (при типизированном DataSet). --------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
||||
|
|||||
| thomas |
|
||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
MFSham,
Приветствую.
Не знаю, не знаю. Вчера вечером спецом переспросил нашего препода в школе, он придерживается такого же мнения: "SQL-команды применимы только к базам данных, но не к таблицам в ДатаСет".
Т.е. тут ты не знаешь что прописать?
Из приведенного тобой выше кода, я углядел, что ДатаСет обьявлен на уровне класса, а ТаблеАдаптер ты обьвил на уровне метода (за пределами метода он не виден) И обновлять свою БД ты хочешь из отдельного метода. В котором твой ДатаСет будет виден, а вот ТаблеАдаптер нет. А ведь для обновления нужно вызывать метод Update для ТаблеАдаптера. Вот изходя из этого и посмотри, что и как поменять в коде. Успехов. Добавлено @ 14:12 Кстати еще раз внимаетльно глянул на твой код, приведенный в третьем посте. Соединение с БД у тебя задается для dbAdapter = new OleDbDataAdapter(myCommand). Соответственно этот обьект и нужно использовать для обновления БД. Но его обьявление нужно вывести на уровень класса и инициацию произваодить либо в событии Load для формы, либо в конструкторе класса(если все действо происходит в классе). Тогда ты сможешь вызвать метод Fill() обьекта dbAdapter в методе public void SaveDSToDB(). Это сообщение отредактировал(а) thomas - 8.11.2007, 14:15 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||
|
|||||||
| MFSham |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: нет Всего: 3 |
thomas,
привет. Да. Долго так объяснять на пальцах что и почему Вот архив с проектом. В классе DataManager метод FormClosed пытаюсь сохранить изменения в БД. Думаю когда запустишь поймешь что к чему. Может моя ася пригодится чего спросить - 488-921-623. блин... ограничение на размер файла стоит... я тебе на мыло вышлю Это сообщение отредактировал(а) MFSham - 8.11.2007, 16:29 --------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
MFSham,
Привет.
А проект посмотрю. Щас мыло проверю. А что написать, я же тебе вроде обьяснил. У тебя был создан ДатаАдаптер, вот его голубчика и заюзай в том методе. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| MFSham |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: нет Всего: 3 |
Я фигею без баяна...
Вот уже 2 дня пытаюсь сделать это сохранение. От нечего делать запустил exe'шник. Дай думаю от туда попрбую сохранить. Попробовал, и о чудо, все сохранилось(!). Запускаю этот же проект из студии - не сохраняет Видно студия приложила к этому руку. Надо в настройках покопаться, думаю проблема в этом. ------ update. В настройке БД свойтсво "Copy to output directory" стояло "Copy always". Поставил в "Copy if never" и все заработало. Наконец-то thomas спасибо за попытки помочь ;) Это сообщение отредактировал(а) MFSham - 9.11.2007, 16:11 --------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
MFSham,
Привет. Рад, что у тебя наконец то получилось.
Вот они, подводные камни typeddataset . Кстати когда все делается через код (без датасета в дизайнере) таких граблей не возникает. А я вчера весь вечер убил ковыряясь в твоем проекте. Ничего не нашел. Плюнул и пошел смотреть теннис. И оттянулся по полной. Мария Юрьевна поборола Свету и вышла в полуфинал А потом еще и Анна порадовала, после досадной баранки во втором сете, "конкретно" выиграла третий и тоже в полуфинале. Короче после этого полночи не спал и сейчас почти никакой. Пока Мадрид не закончиться ничего другое в голову не лезет. Модераторы SORRY за офтоп. Но душа поёт. MFSham, Успехов в дальнейшем. А вообще программка на вид простая, но в нутри ты там такое замутил. Что без полбанки и не разберешь. Добавлено через 2 минуты и 22 секунды ЗЫ и пометь тему как решённую. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |