#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. Да, это правильно