![]() |
|
Модераторы: gambit |
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Я делаю так.
У меня создана файловая база данных MS SQL EXPRESS и лежит она прямо в проекте. Она открыта в ServerExplorer. В проект добавлена сущность ...DataSet.xsd, на которую я перетаскиваю объекты базы данных, которые мне нужны. Когда мне надо присоединить элемент управления к таблице (например, список), я выбираю нужную таблицу в его свойстве DataSource. При этом мастер автоматически создаёт для меня на форме два невидимых объекта, один типа BindingSource и прописывает его в свойстве DataSource элемента управления, а другой -- типа что_то_моёTableAdapter, который использует в своём коде. Правильно? Всё это приводит к глюкам. Во-первых, если я обновляю данные в базе через хранимую процедуру, то они сами собой не обновляются в форме. Во-вторых, изменённые данные не попадают в базу данных, то есть, если я открываю таблицу в Server Explorer, то не вижу там внесённых изменений. И, в третьих, самое удивительное: если я перезапущу программу, то она ВИДИТ изменения, которые внесла, но при этом в базе данных (через Server Explorer) их по-прежнему нет! Отсюда я делаю вывод, что существует, по крайней мере, два каких-то временных места хранения данных, помимо основной базы в SQL сервере. Одно из этих мест отображается программой, пока я с ней работаю. Другое -- обновляется при вызове хранимой процедуры, сохраняется между вызовами программы в каких-то временных файлах и переносится в первое хранилище только при запуске программы. Не просветит ли меня всезнающий ол, что это за хранилища и каким образом можно принудительно инициировать передачу информации между ними? Может быть, можно каким-то образом не использовать или отключать часть этих хранилищ, а то, получается, программа работает со снапшотом а не с базой. |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
P.S.
Для перекачивания из второго места в первое я нашёл способ -- метод Fill. Например, есть у меня таблица Work, содержимое которой меняется при помощи хранимой процедуры. Когда я после вызова этой хранимой процедуры делаю workTableAdapter.Fill(workTrackerSimple3DataSet.Work); то визуально в форме появляется та информация, которая была внесена хранимой процедурой. Всё-таки непонятно, как хранимая процедура может работать, но не вносить изменения в основную базу!? Что же, мастер прочитал её текст и закодировал эквивалент на C#? И когда я вызываю хранимую процедуру, то вызываю не серверный её вариант, а эквивалент на C#? Абсурд. Добавление команды workTableAdapter.Update(workTrackerSimple3DataSet.Work); (сразу после предыдущей) и выглядит нелепым и не помогло ситуации -- в базе по прежнему нет новых данных. Наверное, какая-то транзакция открывается, а потом откатывается... Но как её найти? Добавлено через 3 минуты и 28 секунд Блин, эта тварь, похоже, копирует MDF файл при отладке... |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
В общем, победил эту бадягу...
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |