Utiliser une base de données SQLite dans une application UWPUse a SQLite database in a UWP app

Vous pouvez utiliser SQLite pour stocker et récupérer des données dans une base de données légère sur l’appareil de l’utilisateur.You can use SQLite to store and retrieve data in a light-weight database on the user's device. Ce guide vous explique comment procéder.This guide shows you how.

Avantages liés à l’utilisation de SQLite pour le stockage localSome benefits of using SQLite for local storage

✔️ SQLite est non activable et autonome.SQLite is light-weight and self-contained. Il s’agit d’une bibliothèque de codes indépendante.It's a code library without any other dependencies. Tout est déjà configuré.There's nothing to configure.

✔️ Il n’existe aucun serveur de base de données.There's no database server. Le client et le serveur s’exécutent dans le même processus.The client and the server run in the same process.

✔️ SQLite étant dans le domaine public, son utilisation et sa distribution avec votre application sont libres.SQLite is in the public domain so you can freely use and distribute it with your app.

✔️ SQLite fonctionne sur différentes plateformes et architectures.SQLite works across platforms and architectures.

Vous trouverez davantage d’informations sur SQLite ici.You can read more about SQLite here.

Choisir une couche d’abstractionChoose an abstraction layer

Nous vous recommandons d’utiliser Entity Framework Core ou la bibliothèque SQLite open source générée par Microsoft.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) est un mappeur relationnel objet qui vous permet de travailler avec des données relationnelles en utilisant des objets propres au domaine.Entity Framework (EF) is an object-relational mapper that you can use to work with relational data by using domain-specific objects. Si vous avez déjà utilisé cette infrastructure pour travailler avec des données dans d’autres applications .NET, vous pouvez migrer ce code vers une application UWP. Il fonctionnera avec les changements appropriés apportés à la chaîne de connexion.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.

Pour essayer, consultez Bien démarrer avec EF Core sur la plateforme Windows universelle (UWP) avec une nouvelle base de données.To try it out, see Getting started with EF Core on Universal Windows Platform (UWP) with a New Database.

Bibliothèque SQLiteSQLite library

La bibliothèque Microsoft.Data.Sqlite implémente les interfaces dans l’espace de noms System.Data.Common.The Microsoft.Data.Sqlite library implements the interfaces in the System.Data.Common namespace. Microsoft gère activement ces implémentations, qui fournissent un wrapper intuitif autour de l’API SQLite native de bas niveau.Microsoft actively maintains these implementations, and they provide an intuitive wrapper around the low-level native SQLite API.

Le reste de ce guide vous aide à utiliser cette bibliothèque.The rest of this guide helps you to use this library.

Configurer votre solution pour utiliser la bibliothèque Microsoft.Data.SQliteSet up your solution to use the Microsoft.Data.SQlite library

Nous allons commencer par un projet UWP de base, ajouter une bibliothèque de classes, puis installer les packages NuGet appropriés.We'll start with a basic UWP project, add a class library, and then install the appropriate Nuget packages.

Le type de bibliothèque de classes que vous ajoutez à votre solution et les packages spécifiques que vous installez dépendent de la version minimale du SDK Windows ciblée par votre application.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. Vous trouverez ces informations dans la page de propriétés de votre projet UWP.You can find that information in the properties page of your UWP project.

Version minimale du SDK Windows

Utilisez l’une des sections suivantes en fonction de la version minimale du SDK Windows ciblée par votre projet UWP.Use one of the following sections depending on the minimum version of the Windows SDK that your UWP project targets.

La version minimale de votre projet ne cible pas Fall Creators UpdateThe minimum version of your project does not target the Fall Creators Update

Si vous utilisez Visual Studio 2015, cliquez sur Aide->À propos de Microsoft Visual Studio.If you're using Visual Studio 2015, click Help->About Microsoft Visual Studio. Ensuite, dans la liste des programmes installés, vérifiez que vous disposez du gestionnaire de packages NuGet version 3.5 ou version ultérieure.Then in the list of installed programs, make sure that you have NuGet package manager version of 3.5 or higher. Si le numéro de version est inférieur à celui-ci, installez une version ultérieure de NuGet ici.If your version number is lower than that, install a later version of NuGet here. Sur cette page, vous trouverez toutes les versions de NuGet listées sous le titre Visual Studio 2015.On that page, you'll find all of the versions of Nuget listed beneath the Visual Studio 2015 heading.

Ajoutez ensuite une bibliothèque de classes à votre solution.Next, add class library to your solution. Vous n’êtes pas obligé d’utiliser une bibliothèque de classes pour stocker votre code d’accès aux données, mais nous allons en utiliser une dans notre exemple.You don't have to use a class library to contain your data access code, but we'll use one our example. Nous allons nommer la bibliothèque DataAccessLibrary et nommer la classe de la bibliothèque DataAccess.We'll name the library DataAccessLibrary and we'll name the class in the library to DataAccess.

Capture d’écran montrant la boîte de dialogue Ajouter un nouveau projet avec Installé > Visual C# > Windows universel, et l’option de la bibliothèque de classes mise en évidence.

Cliquez avec le bouton droit sur la solution, puis cliquez sur Gérer les packages NuGet pour la solution.Right-click the solution, and then click Manage NuGet Packages for Solution.

Capture d’écran du panneau Explorateur de solutions, montrant l’utilisateur cliquant avec le bouton droit sur le projet, et l’option Gérer les packages NuGet pour la solution mise en évidence.

Si vous utilisez Visual Studio 2015, choisissez l’onglet Installé, puis vérifiez que le package Microsoft.NETCore.UniversalWindowsPlatform est bien de version 5.2.2 ou de version ultérieure.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 de .NETCore

Si ce n’est pas le cas, installez une version plus récente du package.If it isn't, update the package to a newer version.

Choisissez l’onglet Parcourir, puis recherchez le package Microsoft.Data.SQLite.Choose the Browse tab, and search for the Microsoft.Data.SQLite package. Installez la version 1.1.1 (ou une version antérieure) de ce package.Install version 1.1.1 (or lower) of that package.

Capture d’écran de la boîte de dialogue Microsoft Data SQLite avec le champ de texte Version légendé.

Accédez à la section Ajouter et récupérer des données dans une base de données SQLite de ce guide.Move onto the Add and retrieve data in a SQLite database section of this guide.

La version minimale de votre projet cible Fall Creators UpdateThe minimum version of your project targets the Fall Creators Update

La mise à jour de la version minimale de votre projet UWP vers Fall Creators Update présente plusieurs avantages.There's a couple of benefits to raising the minimum version of your UWP project to the Fall Creators update.

Tout d’abord, vous pouvez utiliser des bibliothèques .NET Standard 2.0 au lieu de bibliothèques de classes normales.First off, you can use .NET Standard 2.0 libraries instead of regular class libraries. Cela signifie que vous pouvez partager votre code d’accès aux données avec n’importe quelle autre application .NET, par exemple une application WPF, Windows Forms, Android, iOS ou ASP.NET.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.

Ensuite, votre application n’a pas besoin de créer un package des bibliothèques SQLite.Secondly, your app does not have to package SQLite libraries. Au lieu de cela, elle peut utiliser la version de SQLite qui est installée avec Windows.Instead, your app can use the version of SQLite that comes installed with Windows. Cette solution est particulièrement intéressante.This helps you in a few ways.

✔️ Réduit la taille de votre application, car vous n’êtes pas obligé de télécharger le fichier binaire SQLite puis de l’empaqueter dans votre application.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.

✔️ Vous évite d’avoir à envoyer (par push) une nouvelle version de votre application aux utilisateurs dans le cas où SQLite publie des correctifs critiques pour les bogues et failles de sécurité dans SQLite.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. La version Windows de SQLite est gérée par Microsoft en coordination avec SQLite.org.The Windows version of SQLite is maintained by Microsoft in coordination with SQLite.org.

✔️ Le temps de chargement des applications est potentiellement plus rapide, car le plus souvent, la version du SDK de SQLite est déjà chargée en mémoire.App load time has the potential to be faster because most likely, the SDK version of SQLite will already be loaded into memory.

Commençons par ajouter une bibliothèque de classes .NET Standard 2.0 à votre solution.Lets start by adding a .NET Standard 2.0 class library to your solution. Vous n’êtes pas obligé d’utiliser une bibliothèque de classes pour stocker votre code d’accès aux données, mais nous allons en utiliser une dans notre exemple.It's not necessary that you use a class library to contain your data access code, but we'll use one our example. Nous allons nommer la bibliothèque DataAccessLibrary et nommer la classe de la bibliothèque DataAccess.We'll name the library DataAccessLibrary and we'll name the class in the library to DataAccess.

Capture d’écran montrant la boîte de dialogue Ajouter un nouveau projet avec Installé > Visual C# > .NET Standard, et l’option de la bibliothèque de classes mise en évidence.

Cliquez avec le bouton droit sur la solution, puis cliquez sur Gérer les packages NuGet pour la solution.Right-click the solution, and then click Manage NuGet Packages for Solution.

Autre capture d’écran du panneau Explorateur de solutions, montrant l’utilisateur cliquant avec le bouton droit sur le projet, et l’option Gérer les packages NuGet mise en évidence.

Notes

Si vous voulez que votre bibliothèque de classes .NET Standard puisse accéder aux dossiers d’application et aux ressources d’image de votre application UWP, vous devez la marquer avec EmbeddedResource et CopyAlways dans ses propriétés.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.

À ce stade, vous avez plusieurs possibilités.At this point, you have a choice. Vous pouvez utiliser la version de SQLite fournie avec Windows. Si vous avez besoin d’utiliser une version spécifique de SQLite, vous pouvez inclure la bibliothèque SQLite dans votre package.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.

Commençons par étudier l’utilisation de la version de SQLite fournie avec Windows.Let's start with how you use the version of SQLite that included with Windows.

Pour utiliser la version de SQLite installée avec WindowsTo use the version of SQLite that is installed with Windows

Choisissez l’onglet Parcourir, recherchez le package Microsoft.Data.SQLite.core, puis installez-le.Choose the Browse tab, and search for the Microsoft.Data.SQLite.core package, and then install it.

Package SQLite Core

Recherchez le package SQLitePCLRaw.bundle_winsqlite3, puis installez-le uniquement dans le projet UWP de votre solution.Search for the SQLitePCLRaw.bundle_winsqlite3 package, and then install it only to the UWP project in your solution.

Package SQLite PCL Raw

Pour inclure SQLite dans votre applicationTo include SQLite with your app

Cette opération n’est pas nécessaire.You don't have to do this. Toutefois, si vous avez besoin d’inclure une version spécifique de SQLite à votre application, choisissez l’onglet Parcourir, puis recherchez le package 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. Installez la version 2.0 (ou une version antérieure) de ce package.Install version 2.0 (or lower) of that package.

Capture d’écran de la boîte de dialogue Microsoft Data SQLite montrant la dernière version stable 2.0.0 sélectionnée.

Ajouter et récupérer des données dans une base de données SQLiteAdd and retrieve data in a SQLite database

Nous allons effectuer les opérations suivantes :We'll do these things:

1️⃣ Préparer la classe d’accès aux données.Prepare the data access class.

2️⃣ Initialiser la base de données SQLite.Initialize the SQLite database.

3️⃣ Insérer des données dans la base de données SQLite.Insert data into the SQLite database.

4️⃣ Récupérer des données dans la base de données SQLite.Retrieve data from the SQLite database.

5️⃣ Ajouter une interface utilisateur de base.Add a basic user interface.

Préparer la classe d’accès aux donnéesPrepare the data access class

Dans votre projet UWP, ajoutez une référence au projet DataAccessLibrary dans votre solution.From your UWP project, add a reference to the DataAccessLibrary project in your solution.

Bibliothèque de classes d’accès aux données

Dans votre projet UWP, ajoutez l’instruction using suivante aux fichiers App.xaml.cs et MainPage.xaml.cs.Add the following using statement to the App.xaml.cs and MainPage.xaml.cs files in your UWP project.

using DataAccessLibrary;

Ouvrez la classe DataAccess dans votre solution DataAccessLibrary, puis rendez cette classe statique.Open the DataAccess class in your DataAccessLibrary solution and make that class static.

Notes

Notre exemple va placer le code d’accès aux données dans une classe statique. Il ne s’agit là que d’un choix de conception parfaitement facultatif.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
    {

    }
}

Ajoutez les instructions using suivantes en haut de ce fichier.Add the following using statements to the top of this file.

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

Initialiser la base de données SQLiteInitialize the SQLite database

Ajoutez à la classe DataAccess une méthode qui initialise la base de données SQLite.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();
    }
}

Ce code crée la base de données SQLite et la stocke dans le magasin de données local de l’application.This code creates the SQLite database and stores it in the application's local data store.

Dans cet exemple, nous appelons la base de données sqlliteSample.db, mais vous pouvez choisir le nom que vous souhaitez tant que vous l’utilisez dans tous les objets SqliteConnection que vous instanciez.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.

Dans le constructeur du fichier App.xaml.cs de votre projet UWP, appelez la méthode InitializeDatabase de la classe DataAccess.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();

}

Insérer des données dans la base de données SQLiteInsert data into the SQLite database

Ajoutez à la classe DataAccess une méthode qui insère des données dans la base de données SQLite.Add a method to the DataAccess class that inserts data into the SQLite database. Ce code utilise les paramètres de la requête afin d’empêcher les attaques par injection de code SQL.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();
    }

}

Récupérer des données dans la base de données SQLiteRetrieve data from the SQLite database

Ajoutez une méthode qui obtient des lignes de données d’ une base de données SQLite.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;
}

La méthode Read avance dans les lignes de données retournées.The Read method advances through the rows of returned data. Elle retourne true s’il reste des lignes ; sinon, elle retourne false.It returns true if there are rows left, otherwise it returns false.

La méthode GetString retourne la valeur de la colonne spécifiée sous forme de chaîne.The GetString method returns the value of the specified column as a string. Elle accepte une valeur entière qui représente l’ordinal de colonne de base zéro des données que vous voulez.It accepts an integer value that represents the zero-based column ordinal of the data that you want. Vous pouvez utiliser des méthodes similaires comme GetDataTime et GetBoolean.You can use similar methods such as GetDataTime and GetBoolean. Choisissez une méthode basée sur le type de données contenues dans la colonne.Choose a method based on what type of data the column contains.

Le paramètre ordinal n’est pas aussi important dans cet exemple, car nous allons sélectionner toutes les entrées d’une même colonne.The ordinal parameter isn't as important in this example because we are selecting all of the entries in a single column. Toutefois, si plusieurs colonnes font partie de votre requête, utilisez la valeur ordinale pour obtenir la colonne de laquelle vous souhaitez extraire des données.However, if multiple columns are part of your query, use the ordinal value to obtain the column you want to pull data from.

Ajouter une interface utilisateur de baseAdd a basic user interface

Dans le fichier MainPage.xaml du projet UWP, ajoutez le code XAML suivant.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>

Cette interface utilisateur de base fournit à l’utilisateur un TextBox qu’il peut utiliser pour entrer une chaîne que nous ajouterons à la base de données SQLite.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. Nous allons connecter le Button de cette interface utilisateur à un gestionnaire d’événements qui va récupérer des données dans la base de données SQLite, puis les afficher dans le ListView.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.

Dans le fichier MainPage.xaml.cs, ajoutez le gestionnaire suivant.In the MainPage.xaml.cs file, add the following handler. Il s’agit de la méthode que nous avons associée à l’événement Click de Button dans l’interface utilisateur.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();
}

C’est terminé.That's it. Explorez Microsoft.Data.Sqlite pour découvrir ce que vous pouvez faire d’autre avec votre base de données SQLite.Explore the Microsoft.Data.Sqlite to see what other things you can do with your SQLite database. Consultez les liens ci-dessous pour en savoir plus sur les autres façons d’utiliser des données dans votre application UWP.Check out the links below to learn about other ways to use data in your UWP app.

Étapes suivantesNext steps

Connecter votre application directement à une base de données SQL ServerConnect your app directly to a SQL Server database

Consultez Utiliser une base de données SQL Server dans une application UWP.See Use a SQL Server database in a UWP app.

Partager du code entre différentes applications sur différentes plateformesShare code between different apps across different platforms

Consultez Partager du code entre une application de bureau et une application UWP.See Share code between desktop and UWP.

Ajouter des pages maître/détail avec les back-ends Azure SQLAdd master detail pages with Azure SQL back ends

Consultez Exemple de base de données de commandes des clients.See Customer Orders Database sample.