Запись в предварительно заполненную базу данных Xamarin

#c# #database #sqlite #xamarin

#c# #База данных #sqlite #xamarin

Вопрос:

Я следовал этому руководству, чтобы настроить предварительно заполненную базу данных для своего мобильного приложения:

https://www.youtube.com/watch?v=aQtNynTLhl4amp;ab_channel=kc70

Это работает так, как задумано, и теперь я могу извлекать и отображать данные из базы данных, которую я добавил в свой проект в качестве встроенного ресурса. Единственная проблема в том, что я не могу выполнить запись в базу данных. Всякий раз, когда я выполняю вставку или обновление одной из таблиц, база данных не сохраняет новые данные.

Как я могу это исправить?

 public App()
{
            InitializeComponent();

            string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "myDatabase.db3");

            Assembly assembly = IntrospectionExtensions.GetTypeInfo(typeof(App)).Assembly;
            Stream embeddedDbStream = assembly.GetManifestResourceStream("MyApp.myDatabase.db3");
           
            FileStream fileStreamToWrite = File.Create(dbPath);
            embeddedDbStream.Seek(0, SeekOrigin.Begin);
            embeddedDbStream.CopyTo(fileStreamToWrite);
            fileStreamToWrite.Close();
}
  

Комментарии:

1. Я это сделал. Извлечение данных с помощью операторов SELECT работает нормально. Я не понимаю, почему ВСТАВКА не будет работать

2. имеющийся у вас код будет выполняться при КАЖДОМ запуске приложения и перезаписи файла dbpath . Вам нужно проверить, существует ли файл, и записывать ТОЛЬКО в том случае, если его нет.

3. @Jason Это хороший момент, но даже после добавления if (!File.Exists(dbPath)) проблема сохраняется. После проведения дополнительных исследований выясняется, что вы не можете выполнить запись во встроенный ресурс. Как я могу обойти это?

4. вы не можете выполнять запись во встроенный ресурс, но вы копируете ресурс в файл в папке, доступной для записи, так что это не должно быть проблемой. Вы используете dbpath в качестве пути для подключения к БД, правильно?

5. Да, это правильно