none
не могу сохранить данные в sql compact 3.5 RRS feed

  • Вопрос

  • Всем привет!

    Я новичек, поэтоу не судите строго :)

    У меня проблема в том, что я не могу сохранить введенные в приложении данные в базу sql compact.

    Visual Studio генерирует стандартный код для кнопки сохранить в BindingNavigator:

     this.Validate();
                this.studentsBindingSource.EndEdit();
                this.tableAdapterManager.UpdateAll(this.database1DataSet);

    Если после закрытия приложения посмотреть содержимое базы, то оно окажется пустым. После этого запускаем приложение и добавленные данные не наблюдаем.

    Пробовал еще такой вариант:

    this.Validate();
                this.studentsBindingSource.EndEdit();
                this.studentsTableAdapter.Update(this.database1DataSet.Students);

    но эффект такой-же.

    Интересно то что, если добавть данные, нажать кнопку сохранить, закрыть приложение и открыть заново, то добавленные данные отображаются!

    Пожалуйста помогите! Очень нужна помощь!

    • Перемещено Siddharth Chavan 2 октября 2010 г. 0:14 MSDN Forums Consolidation (От:SQL Server для разработчиков)

Ответы

  • Найти где прописан путь к Database1.sdf (точнее строка соединения) - скорее всего в app.config, но зависит от того, как именно базу подключали. Достаточно пробежаться текстовым поиском по всему проекту. Потом заменить относительный путь - Database1.sdf - на абсолютный - C:\Documents and Settings\Alesander\Мои документы\Visual Studio 2008\Projects\TestCE\TestCE\Database1.sdf.

    Более правильный вариант - оставить как есть. Сейчас у тебя две базы. Первая - часть исходников проекта, она ведь не должна изменятся при работе самого приложения. Вторая - копия в bin\debug - часть самого приложения. Настройка copy if newer копирует Database1.sdf в bin\debug только если оригинальный Database1.sdf поменялся. Попробуй запустить приложение по Ctrl+f5, поменять данные, закрыть приложение, и тут же запустить его еще раз - в приложении будут видны измененные данные.

    • Помечено в качестве ответа AlesanderBurn 2 мая 2010 г. 14:12
    Модератор

Все ответы

  • Т.е. в первом случае, вы не нажимаете кнопочку "Сохранить" ?

  • Путь в файлу базы прописан абсолютный или относительный? База sql compact включена в проект?

    Скорее всего файл базы включен в проект с настройкой copy to output folder, и копируется при каждом запуске приложения в bin\debug. Приложение работает с копией, сохраняет в нее данные. Копия перезаписывается при каждом запуске приложения из-под студии.

    Модератор
  • Да, я нажимаю кнопку сохранить в binding navigator.
  • Путь к файлу базы данных прописан абсолютный и база sql compact включена в проект. И на самом деле у бд стоит свойство "копировать в выходной каталог" (copy to output folder) со значением "копировать, если новее". Если поставить значение "не копировать", то проект не компилится и выдает ошибку:

    Не удается найти файл базы данных. Проверьте путь к базе данных. [ Data Source = C:\Documents and Settings\Alesander\Мои документы\Visual Studio 2008\Projects\TestCE\TestCE\bin\Debug\Database1.sdf ]

    Ошибка возникает в строке: this.studentsTableAdapter.Fill(this.database1DataSet.Students);

     

     

  • Судя по ошибке - в самом приложении путь к базе все же относительный. Видно же что приложение пытается открыть не файл Database1.sdf в проекте, а его копию в bin\Debug.

    Запусти приложение, сделай изменения, и потом открой файл bin\Debug\Database1.sdf - в нем будут новые данные.

    Модератор
  • Ну да, это так :)

    а как мне создать базу таким образом, чтобы не создавалась копия моей бд в bin\debug. Или может сделать что-то надо?

  • Найти где прописан путь к Database1.sdf (точнее строка соединения) - скорее всего в app.config, но зависит от того, как именно базу подключали. Достаточно пробежаться текстовым поиском по всему проекту. Потом заменить относительный путь - Database1.sdf - на абсолютный - C:\Documents and Settings\Alesander\Мои документы\Visual Studio 2008\Projects\TestCE\TestCE\Database1.sdf.

    Более правильный вариант - оставить как есть. Сейчас у тебя две базы. Первая - часть исходников проекта, она ведь не должна изменятся при работе самого приложения. Вторая - копия в bin\debug - часть самого приложения. Настройка copy if newer копирует Database1.sdf в bin\debug только если оригинальный Database1.sdf поменялся. Попробуй запустить приложение по Ctrl+f5, поменять данные, закрыть приложение, и тут же запустить его еще раз - в приложении будут видны измененные данные.

    • Помечено в качестве ответа AlesanderBurn 2 мая 2010 г. 14:12
    Модератор
  • Спасибо большое за помощь! Исправил путь в app.config  - помогло!