none
База данных не обновляется, хотя ошибок в приложении нет RRS feed

  • Общие обсуждения

  • Есть 2 распростаренных причины , почему это происходит:

    1) Вы вызываете метод AcceptChanges для DataRow / DataTable / DataSet перед вызовом метода Update на вашем DataAdapter или TableAdapter. AcceptChanges будет фиксировать все изменения внесенные после загрузки или после последнего вызова AcceptChanges. Это означает, что если у вас была строка, помеченная как Modified, то после вызова AcceptChanges она будет помечена, как Unchanged. И когда вы вызовете Update , не будет известно, что строка содержит изменения, которые должны быть переданы в базу данных. То же самое относится к вставке и удалению строк. Дополнительную информацию по методу AcceptChanges смотрите в документации (http://msdn.microsoft.com/ru-ru/library/system.data.dataset.acceptchanges.aspx ).

    2) Другой распространненой проблемой является то, что в Visual Studio есть опция копирования файла базы данных в выходную папку проекта. Обычно это происходит с Access MDB или SQL Server MDF файлами, при добавлении файла базы данных в проект.

    Эта опция применяется каждый раз при запуске приложения. Поэтому, несмотря на то, что база данных на самом деле обновляется, обновленной будет копия, а не оригинал. Ключом к этому является свойство “Copy to Output Directory” файла базы данных в проекте. По умолчанию это свойство установлено в “Copy always”, что означает, что каждый раз, когда вы собираете, запускаете или отлаживаете (build, run, or debug) приложнение, Visual Studio копирует файл базы данных в выходную папку (перезаписываю более новую), а затем соединяется с базой.

    Также вы можете использовать опцию "| DataDirectory |" в строке соединения. Для настольных приложений это выходная папка, в которой создается исполняемый файл (обычно это bin \ debug ). Для того чтобы это строка соединения работала, Visual Studio ставит опцию "Copy Always" по умолчанию. Вы можете сохранить строку соединения как есть, но изменить свойство копирования на "Do not copy" , в этом случае изменения базы данных между запусками приложения должны сохранятся.

    Существуют утилиты, с помощью которых мы можете посмотреть, какую на самом деле базу данных использует приложени. Например FileMon (http://www.sysinternals.com ).

    3 ноября 2010 г. 12:08