Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Где хранятся данные через XSD dataset?


Автор: Dims 16.2.2011, 15:23
Я делаю так.

У меня создана файловая база данных MS SQL EXPRESS и лежит она прямо в проекте. Она открыта в ServerExplorer. В проект добавлена сущность ...DataSet.xsd, на которую я перетаскиваю объекты базы данных, которые мне нужны.

Когда мне надо присоединить элемент управления к таблице (например, список), я выбираю нужную таблицу в его свойстве DataSource. При этом мастер автоматически создаёт для меня на форме два невидимых объекта, один типа BindingSource и прописывает его в свойстве DataSource элемента управления, а другой -- типа что_то_моёTableAdapter, который использует в своём коде.

Правильно?

Всё это приводит к глюкам.

Во-первых, если я обновляю данные в базе через хранимую процедуру, то они сами собой не обновляются в форме. 

Во-вторых, изменённые данные не попадают в базу данных, то есть, если я открываю таблицу в Server Explorer, то не вижу там внесённых изменений.

И, в третьих, самое удивительное: если я перезапущу программу, то она ВИДИТ изменения, которые внесла, но при этом в базе данных (через Server Explorer) их по-прежнему нет!

Отсюда я делаю вывод, что существует, по крайней мере, два каких-то временных места хранения данных, помимо основной базы в SQL сервере. Одно из этих мест отображается программой, пока я с ней работаю. Другое -- обновляется при вызове хранимой процедуры, сохраняется между вызовами программы в каких-то временных файлах и переносится в первое хранилище только при запуске программы.

Не просветит ли меня всезнающий ол, что это за хранилища и каким образом можно принудительно инициировать передачу информации между ними? Может быть, можно каким-то образом не использовать или отключать часть этих хранилищ, а то, получается, программа работает со снапшотом а не с базой.

Автор: Dims 16.2.2011, 15:49
P.S.

Для перекачивания из второго места в первое я нашёл способ -- метод Fill.

Например, есть у меня таблица Work, содержимое которой меняется при помощи хранимой процедуры. Когда я после вызова этой хранимой процедуры делаю

workTableAdapter.Fill(workTrackerSimple3DataSet.Work);

то визуально в форме появляется та информация, которая была внесена хранимой процедурой.

Всё-таки непонятно, как хранимая процедура может работать, но не вносить изменения в основную базу!? Что же, мастер прочитал её текст и закодировал эквивалент на C#? И когда я вызываю хранимую процедуру, то вызываю не серверный её вариант, а эквивалент на C#? Абсурд.

Добавление команды
workTableAdapter.Update(workTrackerSimple3DataSet.Work);

(сразу после предыдущей) и выглядит нелепым и не помогло ситуации -- в базе по прежнему нет новых данных.

Наверное, какая-то транзакция открывается, а потом откатывается... Но как её найти?

Добавлено через 3 минуты и 28 секунд
Блин, эта тварь, похоже, копирует MDF файл при отладке...

Автор: Dims 16.2.2011, 17:11
В общем, победил эту бадягу...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)