2017-11-14 28 views
1

Ich versuche eine vorgeladene SQLite db in meine UWP App zu kopieren. Bei der Erstinstallation wird "test.db" kopiert, aber die Größe beträgt 0 Bytes und es gibt keine Tabellen oder Daten. Die ursprüngliche db ist 1300 Bytes mit Daten und Tabellen.UWP PreLoaded SQLite

Ein weiterer Faktor ... wenn ich die App erstellen Mit Visual Studio 2017 und Kompilieren und Ausführen/Debuggen der App funktioniert es gut, aber wenn ich die Appx-Datei sideload oder Download aus dem Windows Store ist die Datenbank leer. Hier

ist der Code, den ich verwende:

Task task = CopyDatabase(); 


private async Task CopyDatabase() 
    { 
     bool isDatabaseExisting = false; 

     try 
     { 
      StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync("Express.db"); 
      isDatabaseExisting = true; 
     } 
     catch 
     { 
      isDatabaseExisting = false; 
     } 

     if (!isDatabaseExisting) 
     { 
      StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("Express.db"); 
      await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder, "Express.db", NameCollisionOption.ReplaceExisting); 
     } 
    } 

ich keine Fehlermeldungen bekommen.

+0

Ich kann nicht von oben antworten, aber einige Dinge zu versuchen: Nach dem Zuweisen von "databaseFile" erstellen Sie ein StorageFile -Optionsobjekt und überprüfen Sie die Dateigröße während der Laufzeit mit einem Haltepunkt. Sehen Sie, es ist 0 oder 1300 Bytes. Erstellen Sie auch einen Unterordner in LocalFolder und kopieren Sie ihn dort, anstatt ihn in den LocalFolder zu kopieren. –

+0

Wann haben Sie die 'CopyDatabase' Methode aufgerufen? In "App.xaml.cs" 'OnLaunched'-Handler? –

+0

Ich rufe "CopyDatabase" in öffentlichen MainPage() public MainPage() { gui = this; InitializeComponent(); Aufgabe task = CopyDatabase(); DataSetup(); CreateNewChartButton.Visibility = Sichtbarkeit.Zusammengebrochen; SignInButton_Click (null, null); } –

Antwort

1

Wird die Datenbankdatei ordnungsgemäß auf dem Zielsystem bereitgestellt? Um es zu bestätigen, sehen Sie Ihren deployed - "Package" - Ordner. Öffnen Sie die Eingabeaufforderung mit Administrator previleges, und sehen Sie das Verzeichnis

c: \ Programme \ WindowsApps \ your-app-ID

Wenn Ihre Datenbank-Datei erfolgreich im Einsatz, können Sie es in das Verzeichnis sehen können . Falls nicht, müssen Sie möglicherweise die Bereitstellungseinstellungen ändern.

die Datei bereitstellen Maschine zum Ziel, Sie die Eigenschaft des einen Satzes sollte ...

‚Buildaction = Inhalt‘

‚zu Ausgabeverzeichnis kopieren‘ = ‚Always Copy‘

Sie können es vom Lösungsexplorer aus setzen und mit der rechten Maustaste auf Ihre Datenbankdatei klicken.

Wenn Sie die Bereitstellungsdatei erfolgreich ausgeführt haben, kopiert Ihr Code Ihre Datenbankdatei in den lokalen App-Ordner.

c: \ Benutzer \ YOUR-USER-ID \ AppData \ Local \ Packages \ IHR-APP-ID \ LocalState

+0

Meine Build-Aktion ist "Inhalt", aber ich setze Kopie auf Ausgabe als "Copy If Newer". Ich werde zu "Copy Always" wechseln. Ich frage mich, ob es nur auf Install kopiert oder wenn es ausgeführt wird. Ich suche nach Antworten. –

0

Zuerst würden Sie await für Ihre CopyDatabase Methode verwenden müssen.

Zweitens, ich schlage vor, Sie rufen diese Methode in MainPage_Loaded Event-Handler anstelle von MainPage-Konstruktor.

+0

weiterhin nicht konsistent die vorgefüllte DB geladen. Es ist ein bisschen ein Hit oder ein Fehlschlag, ob die Daten vorgeladen werden oder ich muss auf eine Utility-Schaltfläche zurückgreifen, um die Daten manuell vorzuladen. –

+0

@TreyBalut Es ist sehr seltsam. Bitte laden Sie ein einfaches reproduzierbares Codebeispiel hoch. damit wir das Problem im Haus untersuchen können. Es ist nicht notwendig, dass Sie die komplette Quelle Ihres Projekts aussenden. Wir brauchen nur ein einfaches Beispiel, um das Problem zu reproduzieren. Sie können vertrauliche Informationen oder Geschäftslogik daraus entfernen. –

Verwandte Themen