2016-11-04 2 views
2

Es fehlt an Dokumentation für SQLite in C# auf der SQLite-Website, die sich auf die in VS2015 verfügbare Erweiterung "SQLite für Universal Windows Platform" bezieht. Hat jemand Dokumentation zu dieser Erweiterung gesehen?UWP - Prüfen, ob Tabelle vorhanden ist

Ich versuche zu sehen, ob eine Tabelle in meiner Datenbank vorhanden ist, kann aber keine Methode finden, dies zu tun. Das ist, was ich tue und warum:

SQLite.Net.SQLiteConnection conn; 

string path = path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "entries.sqlite"); 
if (!System.IO.File.Exists(path)) 
{ 
    conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path); 
    conn.CreateTable<Entry>(); 
} 
else 
{ 
    conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path); 
} 

ich dies tun, weil, wenn dieser ausgeführt wird:

conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path); 

Die Datei wird erstellt, wenn sie noch nicht existiert. Also zuerst muss ich testen, ob es existiert. Meine Annahme ist, dass, wenn die Datei existiert, meine Tabelle existiert, weil es kein Szenario gibt, in dem die Tabelle nicht direkt nach der Erstellung der Datei erstellt wird. Fehle ich im Rahmen der zur Verfügung gestellten Methoden etwas direkteres Testen der Tabelle?

Danke!

PS. Ich habe überprüft, ob meine Frage beantwortet wurde, aber nichts direkt mit dieser API gefunden.

Antwort

0

Sie eine Abfrage der System sqlite_master Tabelle verwenden kann, mit einem bestimmten Namen, wenn eine Tabelle zu sehen gibt:

var tableQuery = "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='Entry';" 
bool tableExists = conn.ExecuteScalar<int>(tableQuery) == 1; 

Wenn die Tabelle nicht vorhanden ist, wird die Abfrage 0 zurück, wenn es vorhanden ist, Es wird 1 zurückgeben.

Allerdings müssen Sie sich keine Gedanken über conn.CreateTable<Entry>(); aufrufen, auch wenn die Tabelle bereits vorhanden ist. SQLite.net ist intelligent genug, um die Tabelle nur dann zu erstellen, wenn sie noch nicht existiert. Wenn sich die Tabelle bereits in der Datenbank befindet, wird dieser Aufruf ignoriert.

+0

Dank dafür! Haben Sie zufällig auch einen Link zur Dokumentation? Ich habe nichts umfassendes gefunden. – VegasVed

+0

Diese Abfrage sollte in der SQLite-Dokumentation auf SQLite.org dokumentiert werden (sie ist nicht UWP-spezifisch). Für die Dokumentation auf SQLite.Net bleiben jedoch wahrscheinlich nur verwandte Artikel und was auf der Github-Seite des Projekts verfügbar ist :-) –

0

Allgemeine Lösung:

public bool TableIsExists<T>(SQLiteConnection conn) 
{ 
    var q = "SELECT name FROM sqlite_master WHERE type='table' AND name=?"; 
    var cmd = conn.CreateCommand(q, typeof(T).Name); 
    return cmd.ExecuteScalar<string>() != null; 
} 
Verwandte Themen