2017-08-19 1 views
1

Ich versuche, SQLitePCL-Paket zu verwenden, um eine einfache UWP-Anwendung zu entwickeln, die Datenbankbefehle ausführt (create-select-update-delete). Ich habe eine Datenbank SQL-Datei, die einige SQLite-Befehle enthält und ich versuche, sie in meinem Code auszuführen:Wie verwende ich SQLitePCL Inhalt der SQL-Datei ausführen

 Uri appUri = new Uri("ms-appx:///Assets/db.sql"); 
     StorageFile sFile = StorageFile.GetFileFromApplicationUriAsync(appUri).AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); 
     string sSQL = FileIO.ReadTextAsync(sFile).AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); 
     ISQLiteStatement cnStatement = dbConnection.Prepare(sSQL); 
     cnStatement.Step(); 

Aber wenn ich das Programm ausführen, es führt nur die erste Anweisung in der SQL-Datei, die CREATE Befehl und Beenden, ohne den Rest der Befehle auszuführen. Hier ist die Probe Inhalt der SQL-Datei:

CREATE TABLE Superhero (
    Type TEXT PRIMARY KEY, 
    Picture TEXT 
); 

    INSERT INTO Superhero (
        Type, 
        Picture 
       ) 
       VALUES (
        'batman', 
        'batman.ico' 
       ); 

Wer weiß, ob es einen Weg in SQLitePCL ist eine SQL-Datei ausführen? Jede Hilfe würde sehr geschätzt werden! Danke!

Antwort

0

Nach der Beschreibung der sqlite3_prepare Schnittstelle:

Diese Routinen nur die erste Anweisung in zSql kompilieren, so * pzTail zeigt links auf das, was nicht kompilierten bleibt.

So dass es scheint nur die erste Anweisung in den Befehlen tatsächlich ausgeführt wird. Der Rest wird still ignoriert. Da jeder Befehl mit dem Symbol ";" endet, können Sie die sql-Befehle für eine schnelle und einfache Lösung in einzelne Anweisungen aufteilen und dann nacheinander ausführen. Zum Beispiel:

string sSQL = FileIO.ReadTextAsync(sFile).AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); 
var dbConnection = new SQLiteConnection("sun.db", SQLiteOpen.READWRITE); 
//using (ISQLiteStatement cnStatement = dbConnection.Prepare(sSQL)) 
//{ 
// var result = cnStatement.Step(); 
//} 
var statements = sSQL.Split(new[] { ';' }); 
foreach (string onestate in statements) 
{ 
    using (ISQLiteStatement cnStatement = dbConnection.Prepare(onestate)) 
    { 
     var result = cnStatement.Step(); 
    } 
} 

Andernfalls müssen Sie das SQLitePCL Nuget Paket aktualisieren.

Verwandte Themen