Ich muss eine vorbefüllte Datenbank in meiner Xamarin.Forms-Anwendung verwenden, also suchte ich nach möglichen Lösungen.Umgang mit vorbefüllten Datenbank in Windows Phone 8.1
Ich habe diese article gefunden und mit Android getestet - es hat funktioniert.
Es verwendet jedoch Windows Phone 8 - das ist nicht kompatibel mit Windows 8.1. So
ich versucht, dieses Windows Phone 8-Code zu ändern:
public static void CopyDatabaseIfNotExists(string dbPath)
{
var storageFile = IsolatedStorageFile.GetUserStoreForApplication();
if (!storageFile.FileExists(dbPath))
{
using (var resourceStream = Application.GetResourceStream(new Uri("people.db3", UriKind.Relative)).Stream)
{
using (var fileStream = storageFile.CreateFile(dbPath))
{
byte[] readBuffer = new byte[4096];
int bytes = -1;
while ((bytes = resourceStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
fileStream.Write(readBuffer, 0, bytes);
}
}
}
}
}
In diesem Code:
public static async void CopyDatabaseIfNotExists(string dbPath)
{
IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
StorageFile existingFile = await Windows.Storage.StorageFile.GetFileFromPathAsync("prep.db");
IStorageFile storageFile = await applicationFolder.GetFileAsync(dbPath);
if (storageFile == null)
{
await existingFile.CopyAndReplaceAsync(storageFile);
Allerdings funktioniert es nicht, ich kann nicht eine richtige Filepath sorgen für meine db vorhandene Datei (es ist in der Wurzel des Projekts), es gibt mir immer diese Fehlermeldung:
Value does not fall within the expected range.
Wie konnte ich ein richtiger Pfad zu meiner voraufgefüllten Datei?
Warum muss ich auch eine Stream-basierte "Kopie" verwenden, wenn ich einfach die Datei selbst kopieren könnte?
Wo es Ihnen nicht geben diesen Fehler (dh die Codezeile?) –
@RowlandShaw Wenn ich versuche, meine vorhandenen vorbelegt Datenbank zu erhalten: ' StorageFile existingFile = erwartet Windows.Storage.StorageFile.GetFileFromPathAsync ("prep.db"); ' – Nestor