2017-12-31 111 views
0

Ich bin wirklich neu in SQLite und ich möchte es in einer UWP App verwenden. Die Sache ist, ich habe gerade diese die Verbindung herstellen können:UWP SQLite - Ich kann keine .db Datei finden/erstellen

public static void InitializeDatabase() 
     { 
      using (SqliteConnection db = 
       new SqliteConnection("Filename=DatabaseFile.db")) 
      { 
       db.Open(); 

       String tableCommand = "CREATE TABLE IF NOT " + 
        "EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        "Text_Entry NVARCHAR(2048) NULL)"; 

       SqliteCommand createTable = new SqliteCommand(tableCommand, db); 

       createTable.ExecuteReader(); 
      } 
     } 

Aber ich ein Datenbanksystem, das alle Hält es die Daten darin (wie mysql). Ist das mit SQLite möglich? Und wie? Außerdem, wenn ich diesen Code verwende, bekomme ich jetzt die Datei erstellt? Wie ist das möglich?

Ich habe eine Db-Datei erstellen, mit den Tabellen in ihm (mit this Software)

Projektstruktur:

Project structure

Und hinzugefügt bereits darin einige Daten, die Datei kann ich benutze, aber wie/wo, ich habe keine Ahnung?

Antwort

-1

SQLite ist keine Serverdatenbank wie MySQL oder SQL Server. Die Datenbank wird im apps-Verzeichnis erstellt. Da UWP-Apps in einer Sandbox ausgeführt werden, können sie nicht von einer anderen UWP-App verwendet werden.

2

die Code-Snippet Sie die Datenbankdatei im lokalen Speicherordner der App erstellen zur Verfügung gestellt werden, die in der Regel auf dem Windows-Pfad C:\Users\[USER_NAME]\AppData\Local\Packages\[PACKAGE_ID]\LocalState (die PACKAGE_ID Ihre Anwendung gefunden wird, wird aufgeführt als Paketname auf den Verpackung Registerkarte die appxmanifest Datei). Da dies im Grunde einer der wenigen Ordner ist, auf die Ihre App vollen Schreib-/Lesezugriff hat, gibt es nicht so viele Möglichkeiten, die Datenbankdatei woanders zu platzieren.

Wenn Sie eine vordefinierte Datenbank haben, die bereits einige Tabellen enthält, und Sie diese als Teil der App packen möchten, können Sie sie einfach der Projektnavigation hinzufügen, wie in Ihrem Screenshot gezeigt, aber nicht vergessen seine Eigenschaften zu öffnen und stellen Sie die Build Action zu Inhalt, sonst ist es nicht Teil des endgültigen App-Paket sein wird:

Set a file's Build Action to "Content"

Dann müssten Sie diese Datei auf die App kopieren Speicherordner vor Erstellen der SQLite Verbindung, z.B. mit so etwas wie:

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///DatabaseFile.db")); 
await file.CopyAsync(ApplicationData.Current.LocalFolder); 

Der ms-appx:/// Präfix teilt das Dateisystem, das die Datei innerhalb des App-Pakets Stammordner vorhanden ist.

In einem realen Leben app, werden Sie einen Scheck hinzufügen, ob die Datei bereits vorhanden ist (kopieren Sie es nur auf dem ersten App Start wahrscheinlich!), Excception Handhabung usw.

+0

Ich bekomme es nicht, also muss ich es beim Start der App ausführen, aber nur einmal? SQLite ist eine .db-Datei, also kannst du in die Datei speichern und sie dort drin behalten, richtig? Ich verstehe es nicht, wie ich es dann benutzen kann oder wie ich "diese Datei benutzen" sagen kann:/Da ich "Standard" -Daten habe, die verwendet werden müssen. – Robin

+0

Wenn die Datenbank nur Standarddaten enthält, die nicht in der gesamten App geändert werden, ist es egal, ob Sie sie einmal oder bei jedem Start kopieren. Der Kernpunkt ist: ERSTES Kopieren der gepackten Datenbank auf die Festplatte (wie in meiner Antwort gezeigt), DANN erstellen Sie die Verbindung wie in Ihrem Code-Snippet - wenn die kopierte db-Datei den gleichen Namen wie im Befehl 'SqliteConnection' angegeben hat Die kopierte Datei wird automatisch verwendet, anstatt eine neue Datenbank zu erstellen, sodass Sie alle vordefinierten Daten lesen können! – andreask

+0

Die Sache ist, ich möchte nicht jedes Mal meine Daten verlieren. Also muss er die Datei lesen, speichern, modifizieren und erneut lesen (wie eine mysql-Datenbank) – Robin

0

nur als Ergänzung zu Die Antwort von @andreask, es ist auch möglich, direkt mit der DB im Anwendungspaket zu arbeiten, wenn auch nur im schreibgeschützten Modus. Sie können den "echten" Dateisystempfad wie folgt abrufen:

Und dann mit der DB normal verbinden. Alle Änderungsabfragen werden jedoch fehlschlagen.