0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
|||||||||||
1 | |||||||||||
Сериализация/десериализация Xml, как сделать чтобы изменения вступили в силу16.04.2012, 00:56. Показов 2404. Ответов 14
Метки нет (Все метки)
Возникла проблема: сохраняю датасет в xml файл-успешно сохранен, изменяю бд, считываю этот файл, изменения успешно нейтрализованы, получаю базу данных на момент сериализации. Закрываю приложение, запускаю вновь-изменений нет, при этом ds.HasChanges()==true
код:
0
|
16.04.2012, 00:56 | |
Ответы с готовыми решениями:
14
Сериализация/Десериализация списка объектов в XML Как сделать, чтобы изменения из dataGridView сохранялись в БД Сериализация / десериализация Сериализация и десериализация |
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
|
|
16.04.2012, 09:32 | 2 |
Если ds это объект типа DataSet и если я правильно понял проблему, то:
Загружая набор данных из файла в DataSet, вы лишь загружаете их в оперативную память. Выполняя метод ds.AcceptChanges(), вы не выполняете запись в базу данных, а лишь расставляете в оперативной памяти флаги RowState для каждой строки DataSet. Чтобы таким образом полностью восстановить БД из XML-файла, нужно выполнять удаление/запись данных в БД. Способов много - поищите на форуме.
0
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
|
16.04.2012, 14:56 [ТС] | 3 |
а вы не поделитесь ссылкой? А то у меня опыта мало, не получается найти ничего. Мне же просто нужно считанный датасет слить с существвующим?
0
|
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
|
|
17.04.2012, 12:23 | 4 |
Давайте тогда начнём с начала... Что Вы хотите сделать?
0
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
||||||
17.04.2012, 12:32 [ТС] | 5 | |||||
Давайте. Я хочу мой
0
|
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
|
|
17.04.2012, 13:32 | 6 |
Вот это не понял:
Что значит "сохраняю изменения"? В Базу данных, в XML или что-то ещё делаете? И что происходит при запуске приложения? Считывание из БД или из XML-файла?
0
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
|
17.04.2012, 14:28 [ТС] | 7 |
Сохраняю изменения в таблице которая в базе данных на сервере.
При запуске приложения читаю с базы данных на сервере в датасет ds все таблицы и представления. Цитата Сообщение от hax32 "Перед тем как десериализовать я делаю изменения в одной из таблиц (удаляю строку) и сохраняю изменения." Это значит, что я удалил или изменил строку, зафиксировал изменения в базе данных на серевере, потом считываю сериализованный датасет ds, в котором эта строка еще не удалена/изменена и в датагриде вижу что изменения действительно откатились. Как мне сохранить то что я вижу в датагриде? Добавлено через 45 секунд сохраннить на сервере в бд
0
|
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
|
|
17.04.2012, 14:47 | 8 |
Итак, всё стало на свои места...
Восстановим ход событий: 1)загрузились данные из бд в DataSet(в память) 2)сохранили данные в XML-файл 3)Удалили строку в DataSet(в памяти). 4)Зафиксировали изменение в БД. 5)Очистили DataSet и загрузили данные из XML-файла в память. 6)Методом AcceptChanges() поставили флаги что все строки в DataSet не изменялись. Естественно ДатаГрид показывает что удалённая строка есть. Естественно в БД её нет-мы же её туда не записывали... Чтобы что-то внятное ответить на вопрос "Как мне сохранить в БД то что я вижу в датагриде?" хотелось бы знать как вы выполняли удаление/запись в БД до этого. Просто способов действительно много, а не хотелось бы идти самым длинным путём...
0
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
||||||||||||||||
17.04.2012, 19:56 [ТС] | 9 | |||||||||||||||
Итак, очень хорошо вы все сформулировали, этот тоже надо уметь)) именно такая проблема и стоит передо мной. Единственное хотелось бы сделать упор на то что я перед десериализацией очищаю полностью датасет ds, а датагридов с соответсвующими им представлениями у меня 6, поэтому нужно фиксировать все изменния сразу.
Теперь по поводу как я сохраняю/удаляю/изменяю Ищу изменения датасета:
0
|
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
|
||||||
18.04.2012, 10:45 | 10 | |||||
Получается Вам нужен DataSet с правильно расставленными RowState.
Можно так:
Но это только про удалённые строки... Добавленные и различающиеся аналогично... А вообще самый простой способ-удалить всё нафиг из БД, пометить все строки как added и записать...
0
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
||||||
18.04.2012, 15:56 [ТС] | 11 | |||||
уже почти клево, щас проверю код, единственное что хотел уточнить: я и хочу полностью датасет удалить и полностью загрузить, поэтому может эта задача решается еще проще?
и еще хотел уточнить для чего схему считывать и сохранять? разве ds.WriteXml(fs); недостаточно? Добавлено через 45 минут И еще вопрос, вот вы мне посоветовали
и неясно что в цикле происходит? Получается каждый найденный ряд помечаем как добавленный, потом импортируем заново в таблицу? Неужели нету метода без этого построчного восстановления, что то типа - удалить весь датасет и считать в него новый?
0
|
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
|
|
20.04.2012, 09:43 | 12 |
Иногда - нет. У меня в элементарном тестовом примере был косяк с типом DateTime. Если восстанавливать через ReadXML(), то столбец получается с типом String и невозможно свести таблицы cо столбцами разных типов через Merge().
Конечно! Удаляем всё нафиг из БД, чистим DataSet, загружаем всё из XML, не делаем AcceptChanges() (все строки должны быть помеченными как Added) и сохраняем. В примере добавляются те строки, которых нет в БД, но есть в XML. Для этого их нужно сначала найти. Они отбираются через Linq. В цикле каждый найденный ряд помечаем как добавленный, потом импортируем заново в таблицу. Это не лучшее решение. В данном случае оно бессмысленно если можно всё удалить и записать заново.
0
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
|
20.04.2012, 13:07 [ТС] | 13 |
Так вот я в первом посте приводил код - все удалить потом все считать. Как мне его доработать, чтобы он все таки решал мою проблему? Без линка и поиска добавленных строк, которых нет в бд.
0
|
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
|
||||||
20.04.2012, 14:52 | 14 | |||||
Сначала всё удаляем из БД (надеясь что всё потом сможем восстановить из XML).
Затем загружаем из XML и сохраняем:
0
|
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 31
|
|
20.04.2012, 15:38 [ТС] | 15 |
вот. Оно не работает почему то! не сохраняет. Уменя же для каждой таблицы отдельное сохранение, запечатано в класс, получается что мне нужно вызвать 6 раз SaveData ?Я так делал, все равно изменения не сохранились
Добавлено через 11 минут У меня же для каждой таблицы отдельное сохранение, запечатано в класс, получается что мне нужно вызвать 6 раз SaveData ?Я так делал, все равно изменения не сохранились
0
|
20.04.2012, 15:38 | |
20.04.2012, 15:38 | |
Помогаю со студенческими работами здесь
15
Protobuf сериализация десериализация Сериализация и десериализация ORM EF Как сделать чтобы изменения внесённые в запрос сохранились в базе данных? Помогите плз по C#, сериализация десериализация Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |