Verwenden einer SQLite-Datenbank in einer UWP-AppUse a SQLite database in a UWP app

Sie können SQLite verwenden, um Daten in einer einfachen Datenbank auf dem Gerät des Benutzers zu speichern und abzurufen.You can use SQLite to store and retrieve data in a light-weight database on the user's device. Dieser Leitfaden zeigt Ihnen wie.This guide shows you how.

Einige Vorteile der Verwendung von SQLite für die lokale SpeicherungSome benefits of using SQLite for local storage

✔️ SQLite ist einfach und eigenständig.SQLite is light-weight and self-contained. Es ist eine Code-Bibliothek ohne weitere Abhängigkeiten.It's a code library without any other dependencies. Es gibt nichts zu konfigurieren.There's nothing to configure.

✔️ Es gibt keinen Datenbankserver.There's no database server. Client und der Server laufen im selben Prozess.The client and the server run in the same process.

✔️ SQLite ist öffentlich zugänglich, so dass Sie es mit Ihrer App frei verwenden und verteilen können.SQLite is in the public domain so you can freely use and distribute it with your app.

✔️ SQLite arbeitet plattform- und architekturübergreifend.SQLite works across platforms and architectures.

Mehr über SQLite erfahren Sie hier.You can read more about SQLite here.

Auswählen einer AbstraktionsschichtChoose an abstraction layer

Wir empfehlen, dass Sie entweder Entity Framework Core oder die Open-Source-SQLite-Bibliothek von Microsoft verwenden.We recommend that you use either the Entity Framework Core or the open-source SQLite library built by Microsoft.

Entity Framework CoreEntity Framework Core

Entity Framework (EF) ist eine objektrelationale Zuordnung, die Ihnen über domänenspezifische Objekte die Verwendung relationaler Daten ermöglicht.Entity Framework (EF) is an object-relational mapper that you can use to work with relational data by using domain-specific objects. Wenn Sie dieses Framework bereits für die Arbeit mit Daten in anderen .NET-Apps verwendet haben, können Sie diesen Code in eine UWP-App migrieren. Es funktioniert mit entsprechenden Änderungen an der Verbindungszeichenfolge.If you've already used this framework to work with data in other .NET apps, you can migrate that code to a UWP app and it will work with appropriate changes to the connection string.

Weitere Informationen finden Sie unter Erste Schritte mit EF Core auf der Universellen Windows-Plattform (UWP) mit einer neuen Datenbank.To try it out, see Getting started with EF Core on Universal Windows Platform (UWP) with a New Database.

SQLite-BibliothekSQLite library

Die Microsoft.Data.Sqlite-Bibliothek implementiert die Schnittstellen im System.Data.Common-Namespace.The Microsoft.Data.Sqlite library implements the interfaces in the System.Data.Common namespace. Microsoft pflegt diese Implementierungen aktiv und bietet einen intuitiven Wrapper für die native SQLite-API auf niedriger Ebene.Microsoft actively maintains these implementations, and they provide an intuitive wrapper around the low-level native SQLite API.

Der Rest dieses Leitfadens hilft Ihnen bei der Verwendung dieser Bibliothek.The rest of this guide helps you to use this library.

Einrichten Ihrer Lösung für die Verwendung der Microsoft.Data.SQlite BibliothekSet up your solution to use the Microsoft.Data.SQlite library

Wir beginnen mit einem einfachen UWP-Projekt, fügen eine Klassenbibliothek hinzu und installieren dann die entsprechenden Nuget-Pakete.We'll start with a basic UWP project, add a class library, and then install the appropriate Nuget packages.

Die Art der Klassenbibliothek, die Sie zu Ihrer Lösung hinzufügen, und die spezifischen Pakete, die Sie installieren, hängen von der Mindestversion des Windows SDKs ab, auf das Ihre Anwendung abzielt.The type of class library that you add to your solution, and the specific packages that you install depends on the minimum version of the Windows SDK that your app targets. Sie finden diese Informationen auf der Eigenschaftenseite des UWP-Projekts.You can find that information in the properties page of your UWP project.

Mindestversion des Windows SDK

Verwenden Sie einen der folgenden Abschnitte, abhängig von der Mindestversion des Windows SDKs, auf die Ihr UWP-Projekt abzielt.Use one of the following sections depending on the minimum version of the Windows SDK that your UWP project targets.

Die Mindestversion Ihres Projekts zielt nicht auf das Fall Creators Update ab.The minimum version of your project does not target the Fall Creators Update

Wenn Sie Visual Studio 2015 verwenden, klicken Sie auf Hilfe->Info über Microsoft Visual Studio.If you're using Visual Studio 2015, click Help->About Microsoft Visual Studio. Stellen Sie dann in der Liste der installierten Programme sicher, dass Sie über den NuGet Package Manager Version 3.5 oder höher verfügen.Then in the list of installed programs, make sure that you have NuGet package manager version of 3.5 or higher. Wenn Ihre Versionsnummer niedriger ist, installieren Sie hier eine spätere Version von NuGet.If your version number is lower than that, install a later version of NuGet here. Auf dieser Seite finden Sie unter der Überschrift Visual Studio 2015 alle Versionen von Nuget.On that page, you'll find all of the versions of Nuget listed beneath the Visual Studio 2015 heading.

Als Nächstes fügen Sie Ihrer Lösung eine Klassenbibliothek hinzu.Next, add class library to your solution. Sie benötigen keine Klassenbibliothek, die Ihren Datenzugriffscode enthält, in unserem Beispiel verwenden wir jedoch eine.You don't have to use a class library to contain your data access code, but we'll use one our example. Wir nennen die Bibliothek DataAccessLibrary und die Klasse in der Bibliothek DataAccess.We'll name the library DataAccessLibrary and we'll name the class in the library to DataAccess.

Screenshot des Dialogfelds „Neues Projekt hinzufügen“ mit ausgewähltem „Installiert > Visual C Sharp > Windows Universal“ und der hervorgehobenen Option „Klassenbibliothek“.

Klicken Sie mit der rechten Maustaste auf die Lösung, und klicken Sie dann auf NuGet-Pakete für Lösung verwalten.Right-click the solution, and then click Manage NuGet Packages for Solution.

Screenshot des Projektmappen-Explorer-Bereichs mit dem Projekt, auf das mit der rechten Maustaste geklickt wurde, und der hervorgehobenen Option „NuGet-Pakete für Projektmappe verwalten“.

Wenn Sie Visual Studio 2015 verwenden, wählen Sie die Registerkarte Installiert aus, und stellen Sie sicher, dass die Versionsnummer des Microsoft.NETCore.UniversalWindowsPlatform-Pakets 5.2.2 oder höher ist.If you're using Visual Studio 2015, Choose the Installed tab, and make sure that the version number of the Microsoft.NETCore.UniversalWindowsPlatform package is 5.2.2 or higher.

Version von .NETCore

Ist dies nicht der Fall, aktualisieren Sie das Paket auf eine neuere Version.If it isn't, update the package to a newer version.

Wählen Sie die Registerkarte Durchsuchen aus, und suchen Sie nach dem Paket Microsoft.Data.SQLite.Choose the Browse tab, and search for the Microsoft.Data.SQLite package. Installieren Sie Version 1.1.1 (oder niedriger) dieses Pakets.Install version 1.1.1 (or lower) of that package.

Screenshot des Dialogfelds „Microsoft Data SQLite“ mit angezeigtem Versionstextfeld.

Gehen Sie zum Abschnitt Hinzufügen und Abrufen von Daten in einer SQLite-Datenbank in diesem Leitfaden.Move onto the Add and retrieve data in a SQLite database section of this guide.

Die Mindestversion Ihres Projekts zielt auf das Fall Creators Update ab.The minimum version of your project targets the Fall Creators Update

Das Erhöhen der Mindestversion Ihres UWP-Projekts auf das Fall Creators Update birgt eine Reihe von Vorteilen.There's a couple of benefits to raising the minimum version of your UWP project to the Fall Creators update.

Zunächst einmal können Sie .NET Standard 2.0-Bibliotheken anstelle von regulären Klassenbibliotheken verwenden.First off, you can use .NET Standard 2.0 libraries instead of regular class libraries. Das bedeutet, dass Sie Ihren Datenzugriffscode mit jeder anderen .NET-basierten Anwendung wie WPF, Windows Forms, Android, iOS oder ASP.NET teilen können.That means that you can share your data access code with any other .NET-based app such as a WPF, Windows Forms, Android, iOS, or ASP.NET app.

Zweitens müssen in Ihrer App keine SQLite-Bibliotheken gepackt werden.Secondly, your app does not have to package SQLite libraries. Stattdessen kann Ihre App die Version von SQLite verwenden, die mit Windows installiert wird.Instead, your app can use the version of SQLite that comes installed with Windows. Das hilft Ihnen in mehrfacher Hinsicht.This helps you in a few ways.

✔️ Reduziert die Größe Ihrer App, da Sie die SQLite-Binärdatei nicht herunterladen und dann als Teil Ihrer App verpacken müssen.Reduces the size of your application because you don't have to download the SQLite binary, and then package it as part of your application.

✔️ Verhindert, dass Sie eine neue Version Ihrer App an Benutzer weitergeben müssen, falls SQLite wichtige Fixes für Fehler und Sicherheitsschwachstellen in SQLite veröffentlicht.Prevents you from having to push a new version of your app to users in the event that SQLite publishes critical fixes to bugs and security vulnerabilities in SQLite. Die Windows-Version von SQLite wird von Microsoft in Abstimmung mit SQLite.org gepflegt.The Windows version of SQLite is maintained by Microsoft in coordination with SQLite.org.

✔️ Die Ladezeit der App kann kürzer sein, da die SDK-Version von SQLite wahrscheinlich bereits in den Speicher geladen wird.App load time has the potential to be faster because most likely, the SDK version of SQLite will already be loaded into memory.

Beginnen wir mit dem Hinzufügen einer .NET Standard 2.0-Klassenbibliothek zu Ihrer Lösung.Lets start by adding a .NET Standard 2.0 class library to your solution. Es ist nicht notwendig, dass Sie eine Klassenbibliothek verwenden, die Ihren Datenzugriffscode enthält, aber wir verwenden eine in unserem Beispiel.It's not necessary that you use a class library to contain your data access code, but we'll use one our example. Wir nennen die Bibliothek DataAccessLibrary und die Klasse in der Bibliothek DataAccess.We'll name the library DataAccessLibrary and we'll name the class in the library to DataAccess.

Screenshot des Dialogfelds „Neues Projekt hinzufügen“ mit ausgewähltem „Installiert > Visual C Sharp > dot NET Standard“ und der hervorgehobenen Option „Klassenbibliothek“.

Klicken Sie mit der rechten Maustaste auf die Lösung, und klicken Sie dann auf NuGet-Pakete für Lösung verwalten.Right-click the solution, and then click Manage NuGet Packages for Solution.

Ein weiterer Screenshot des Projektmappen-Explorer-Bereichs mit dem Projekt, auf das mit der rechten Maustaste geklickt wurde, und der hervorgehobenen Option „NuGet-Pakete verwalten“.

Hinweis

Wenn Sie möchten, dass Ihre .NET Standard-Klassenbibliothek auf App-Ordner und Bildobjekte Ihrer UWP-App zugreifen kann, müssen Sie sie in ihren Eigenschaften als EmbeddedResource und CopyAlways markieren.If you want your .NET Standard class library to be able to access app folders and image assets of your UWP app, you will need to mark it as EmbeddedResource and CopyAlways in its properties.

An diesem Punkt haben Sie die Wahl.At this point, you have a choice. Sie können die Version von SQLite verwenden, die in Windows enthalten ist, oder wenn Sie einen Grund haben, eine bestimmte Version von SQLite zu verwenden, können Sie die SQLite-Bibliothek in Ihr Paket aufnehmen.You can use the version of SQLite that is included with Windows or if you have some reason to use a specific version of SQLite, you can include the SQLite library in your package.

Beginnen wir damit, wie Sie die Version von SQLite verwenden, die in Windows enthalten ist.Let's start with how you use the version of SQLite that included with Windows.

So verwenden Sie die unter Windows installierte Version von SQLiteTo use the version of SQLite that is installed with Windows

Wählen Sie die Registerkarte Durchsuchen, suchen Sie nach dem Microsoft.Data.SQLite.core-Paket, und installieren Sie es.Choose the Browse tab, and search for the Microsoft.Data.SQLite.core package, and then install it.

SQLite Core-Paket

Suchen Sie nach dem Paket SQLitePCLRaw.bundle_winsqlite3, und installieren Sie es nur im UWP-Projekt Ihrer Lösung.Search for the SQLitePCLRaw.bundle_winsqlite3 package, and then install it only to the UWP project in your solution.

SQLite PCL Raw-Paket

So binden Sie SQLite in Ihre App einTo include SQLite with your app

Sie müssen dies nicht tun.You don't have to do this. Wenn Sie jedoch einen Grund haben, eine bestimmte Version von SQLite in Ihre App aufzunehmen, wählen Sie die Registerkarte Durchsuchen aus, und suchen Sie nach dem Paket Microsoft.Data.SQLite.But if you have a reason to include a specific version of SQLite with your app, choose the Browse tab, and search for the Microsoft.Data.SQLite package. Installieren Sie Version 2.0 (oder niedriger) dieses Pakets.Install version 2.0 (or lower) of that package.

Screenshot des Dialogfelds „Microsoft Data SQLite“ mit ausgewählter „Letzter stabiler Version 2.0.0“.

Hinzufügen und Abrufen von Daten in einer SQLite-DatenbankAdd and retrieve data in a SQLite database

Wir führen die folgenden Vorgänge aus:We'll do these things:

1️⃣ Vorbereiten der DatenzugriffsklassePrepare the data access class.

2️⃣ Initialisieren der SQLite-DatenbankInitialize the SQLite database.

3️⃣ Einfügen von Daten in die SQLite-DatenbankInsert data into the SQLite database.

4️⃣ Abrufen von Daten aus der SQLite-DatenbankRetrieve data from the SQLite database.

5️⃣ Hinzufügen einer einfachen BenutzeroberflächeAdd a basic user interface.

Vorbereiten der DatenzugriffsklassePrepare the data access class

Fügen Sie aus Ihrem UWP-Projekt einen Verweis auf das DataAccessLibrary-Projekt in Ihrer Lösung hinzu.From your UWP project, add a reference to the DataAccessLibrary project in your solution.

Datenzugriffs-Klassenbibliothek

Fügen Sie die folgende using-Anweisung den Dateien App.xaml.cs und MainPage.xaml.cs in Ihrem UWP-Projekt hinzu.Add the following using statement to the App.xaml.cs and MainPage.xaml.cs files in your UWP project.

using DataAccessLibrary;

Öffnen Sie die DataAccess-Klasse in Ihrer DataAccessLibrary-Lösung, und deklarieren Sie diese Klasse als statisch.Open the DataAccess class in your DataAccessLibrary solution and make that class static.

Hinweis

In unserem Beispiel wird der Datenzugriffscode in einer statischen Klasse platziert. Dies ist jedoch nur eine Designentscheidung und völlig optional.While our example will place data access code in a static class, it's just a design choice and is completely optional.

namespace DataAccessLibrary
{
    public static class DataAccess
    {

    }
}

Fügen Sie die folgenden using-Anweisungen am Anfang dieser Datei hinzu.Add the following using statements to the top of this file.

using Microsoft.Data.Sqlite;
using System.Collections.Generic;

Initialisieren der SQLite-DatenbankInitialize the SQLite database

Fügen Sie der DataAccess-Klasse eine Methode hinzu, die die SQLite-Datenbank initialisiert.Add a method to the DataAccess class that initializes the SQLite database.

public async static void InitializeDatabase()
{ 
     await ApplicationData.Current.LocalFolder.CreateFileAsync("sqliteSample.db", CreationCollisionOption.OpenIfExists);
     string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
     using (SqliteConnection db =
        new SqliteConnection($"Filename={dbpath}"))
    {
        db.Open();

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

        SqliteCommand createTable = new SqliteCommand(tableCommand, db);

        createTable.ExecuteReader();
    }
}

Dieser Code erstellt die SQLite-Datenbank und speichert sie im lokalen Datenspeicher der Anwendung.This code creates the SQLite database and stores it in the application's local data store.

In diesem Beispiel benennen wir die Datenbank als sqlliteSample.db. Sie können aber jeden beliebigen Namen verwenden, solange Sie diesen Namen in allen instanziierten SqliteConnection-Objekten verwenden.In this example, we name the database sqlliteSample.db but you can use whatever name you want as long as you use that name in all SqliteConnection objects that you instantiate.

Rufen Sie im Konstruktor der Datei App.xaml.cs Ihres UWP-Projekts die InitializeDatabase-Methode der DataAccess-Klasse auf.In the constructor of the App.xaml.cs file of your UWP project, call the InitializeDatabase method of the DataAccess class.

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;

    DataAccess.InitializeDatabase();

}

Einfügen von Daten in die SQLite-DatenbankInsert data into the SQLite database

Fügen Sie der DataAccess-Klasse eine Methode hinzu, die Daten in die SQLite-Datenbank einfügt.Add a method to the DataAccess class that inserts data into the SQLite database. Dieser Code verwendet Parameter in der Abfrage, um Angriffe durch Einschleusung von SQL-Befehlen zu verhindern.This code uses parameters in the query to prevent SQL injection attacks.

public static void AddData(string inputText)
{
    string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
    using (SqliteConnection db =
      new SqliteConnection($"Filename={dbpath}"))
    {
        db.Open();

        SqliteCommand insertCommand = new SqliteCommand();
        insertCommand.Connection = db;

        // Use parameterized query to prevent SQL injection attacks
        insertCommand.CommandText = "INSERT INTO MyTable VALUES (NULL, @Entry);";
        insertCommand.Parameters.AddWithValue("@Entry", inputText);

        insertCommand.ExecuteReader();

        db.Close();
    }

}

Abrufen von Daten aus der SQLite-DatenbankRetrieve data from the SQLite database

Fügen Sie eine Methode hinzu, die Datenzeilen aus einer SQLite-Datenbank abruft.Add a method that gets rows of data from a SQLite database.

public static List<String> GetData()
{
    List<String> entries = new List<string>();

   string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
   using (SqliteConnection db =
      new SqliteConnection($"Filename={dbpath}"))
    {
        db.Open();

        SqliteCommand selectCommand = new SqliteCommand
            ("SELECT Text_Entry from MyTable", db);

        SqliteDataReader query = selectCommand.ExecuteReader();

        while (query.Read())
        {
            entries.Add(query.GetString(0));
        }

        db.Close();
    }

    return entries;
}

Die Read-Methode durchläuft die Zeilen der zurückgegebenen Daten.The Read method advances through the rows of returned data. Sie gibt true zurück, wenn noch Zeilen übrig sind, andernfalls false.It returns true if there are rows left, otherwise it returns false.

Die GetString-Methode gibt den Wert der angegebenen Spalte als Zeichenfolge zurück.The GetString method returns the value of the specified column as a string. Sie akzeptiert einen Ganzzahlwert, der die nullbasierte Spalten-Ordinalzahl der gewünschten Daten darstellt.It accepts an integer value that represents the zero-based column ordinal of the data that you want. Sie können Methoden wie GetDataTime und GetBoolean verwenden.You can use similar methods such as GetDataTime and GetBoolean. Wählen Sie eine Methode für den Datentyp der Spalte aus.Choose a method based on what type of data the column contains.

Der Ordinalparameter ist in diesem Beispiel nicht so wichtig, da wir alle Einträge in einer einzigen Spalte auswählen.The ordinal parameter isn't as important in this example because we are selecting all of the entries in a single column. Wenn jedoch mehrere Spalten Teil Ihrer Abfrage sind, verwenden Sie den Ordinalwert, um die Spalte zu erhalten, aus der Sie Daten abrufen möchten.However, if multiple columns are part of your query, use the ordinal value to obtain the column you want to pull data from.

Hinzufügen einer einfachen BenutzeroberflächeAdd a basic user interface

Fügen Sie in der Datei MainPage.xaml des UWP-Projekts den folgenden XAML-Code hinzu.In the MainPage.xaml file of the UWP project, add the following XAML.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <TextBox Name="Input_Box"></TextBox>
        <Button Click="AddData">Add</Button>
        <ListView Name="Output">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackPanel>
</Grid>

Diese grundlegende Benutzeroberfläche bietet dem Benutzer eine TextBox, über die er eine Zeichenfolge eingeben kann, die wir der SQLite-Datenbank hinzufügen.This basic user interface gives the user a TextBox that they can use to type a string that we'll add to the SQLite database. Wir verbinden den Button in dieser Benutzeroberfläche mit einem Ereignishandler, der Daten aus der SQLite-Datenbank abruft und diese Daten dann in der ListView anzeigt.We'll connect the Button in this UI to an event handler that will retrieve data from the SQLite database and then show that data in the ListView.

Fügen Sie in der Datei MainPage.xaml.cs den folgenden Handler hinzu.In the MainPage.xaml.cs file, add the following handler. Dies ist die Methode, die wir dem Click-Ereignis des Button in der UI zugeordnet haben.This is the method that we associated with the Click event of the Button in the UI.

private void AddData(object sender, RoutedEventArgs e)
{
    DataAccess.AddData(Input_Box.Text);

    Output.ItemsSource = DataAccess.GetData();
}

Das war's.That's it. Erkunden Sie Microsoft.Data.Sqlite, um zu erfahren, welche weiteren Vorgänge Sie mit Ihrer SQLite-Datenbank ausführen können.Explore the Microsoft.Data.Sqlite to see what other things you can do with your SQLite database. Besuchen Sie die Links unten, um mehr über andere Möglichkeiten der Datenverwendung in Ihrer UWP-App zu erfahren.Check out the links below to learn about other ways to use data in your UWP app.

Nächste SchritteNext steps

Direktes Verbinden Ihrer App mit einer SQL Server-DatenbankConnect your app directly to a SQL Server database

Informationen hierzu finden Sie unter Verwenden einer SQL Server-Datenbank in einer UWP-App.See Use a SQL Server database in a UWP app.

Nutzen des gleichen Codes für verschiedene Apps auf verschiedenen PlattformenShare code between different apps across different platforms

Weitere Informationen finden Sie unter Migrieren von einer Desktopanwendung zu UWP.See Share code between desktop and UWP.

Hinzufügen von Master/Detail-Seiten mit Azure SQL-Back-EndsAdd master detail pages with Azure SQL back ends

Weitere Informationen finden Sie unter Customers Orders Database sample (Beispiel für eine Kundenauftragsdatenbank).See Customer Orders Database sample.