Sdílet prostřednictvím


Použití databáze SQLite v aplikaci pro UPW

SQLite můžete použít k ukládání a načítání dat v odlehčené databázi na zařízení uživatele. Tento průvodce vám ukáže, jak na to.

Některé výhody použití SQLite pro místní úložiště

✔️ SQLite je lehká a samostatná. Jedná se o knihovnu kódu bez jakýchkoli dalších závislostí. Není nic ke konfiguraci.

✔️ Neexistuje žádný databázový server. Klient a server běží ve stejném procesu.

✔️ SQLite je ve veřejné doméně, takže ji můžete volně používat a distribuovat s vaší aplikací.

✔️ SQLite funguje napříč platformami a architekturami.

Další informace o SQLite najdete.

Volba abstraktní vrstvy

Doporučujeme použít knihovnu Entity Framework Core nebo opensourcovou knihovnu SQLite sestavenou Microsoftem.

Entity Framework Core

Entity Framework (EF) je objektově-relační mapovač, který můžete použít k práci s relačními daty pomocí objektů specifických pro doménu. Pokud jste už tuto architekturu použili k práci s daty v jiných aplikacích .NET, můžete tento kód migrovat do aplikace pro UPW a bude fungovat s příslušnými změnami připojovacího řetězce.

Pokud si to chcete vyzkoušet, přečtěte si kapitolu Začínáme s EF Core.

Knihovna SQLite

Knihovna Microsoft.Data.Sqlite implementuje rozhraní v "namespace" System.Data.Common. Microsoft tyto implementace aktivně udržuje a poskytuje intuitivní obálku kolem nativního rozhraní SQLite API nízké úrovně.

Zbývající část tohoto průvodce vám pomůže používat tuto knihovnu.

Nastavení řešení pro použití knihovny Microsoft.Data.SQlite

Začneme základním projektem UPW a pak nainstalujeme příslušné balíčky NuGet.

Poznámka

Ujistěte se, že jste nainstalovali Microsoft.Data.Sqlite' package and not 'Microsoft.Data.Sqlite.Core. Tento balíček nainstaluje Microsoft.Data.Sqlite.Core jako závislost.

Všechny podporované verze Windows podporují SQLite, takže vaše aplikace nemusí zabalit knihovny SQLite. Místo toho může vaše aplikace používat verzi SQLite, která je nainstalovaná ve Windows. To vám pomůže několika způsoby.

✔️ Zmenšuje velikost aplikace, protože nemusíte stahovat binární soubor SQLite a pak ji zabalit jako součást aplikace.

✔️ Zabrání uživatelům v nabízení nové verze aplikace v případě, že SQLite publikuje kritické opravy chyb a ohrožení zabezpečení v SQLite. Microsoft udržuje verzi windows SQLite v koordinaci s SQLite.org.

✔️ Doba načítání aplikace může být rychlejší, protože s největší pravděpodobností se do paměti načte verze sady SDK SQLite.

Začněme přidáním třídy do projektu UPW s názvem DataAccess. Projekt knihovny tříd .NET Standard můžete použít k zahrnutí kódu pro přístup k datům, ale v našem příkladu ho nebudeme používat.

Pravým tlačítkem myši klikněte na řešení a potom klepněte na příkaz Spravovat balíčky NuGet pro řešení.

Další snímek obrazovky panelu Průzkumníka řešení s projektem, na který bylo kliknuto pravým tlačítkem, a se zvýrazněnou možností Spravovat balíčky NuGet.

V tuto chvíli máte na výběr. Můžete použít verzi SQLite, která je součástí Windows, nebo pokud máte nějaký důvod k použití konkrétní verze SQLite, můžete do balíčku zahrnout knihovnu SQLite. Budeme používat verzi SQLite, která je součástí Windows.

Zvolte kartu Procházet, vyhledejte balíček Microsoft.Data.SQLite.Core a nainstalujte nejnovější stabilní verzi.

balíček SQLite Core

Přidání a načtení dat v databázi SQLite

Provedeme tyto akce:

1️⃣ Připravte třídu přístupu k datům.

2️⃣ Inicializace databáze SQLite.

3️⃣ Vložte data do databáze SQLite.

4️⃣ Načtení dat z databáze SQLite

5️⃣ Přidat základní uživatelské rozhraní.

Příprava třídy přístupu k datům

Otevřete třídu DataAccess v projektu a nastavte ji jako statickou.

Poznámka

I když náš příklad umístí kód pro přístup k datům do statické třídy, je to jen volba návrhu a je zcela volitelná.

public static class DataAccess
{

}

Na začátek tohoto souboru přidejte následující příkazy using.

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

Inicializace databáze SQLite

Přidejte metodu do třídy DataAccess, která inicializuje databázi SQLite.

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();
    }
}

Tento kód vytvoří databázi SQLite a uloží ji do místního úložiště dat aplikace.

V tomto příkladu pojmenujeme databázi sqlliteSample.db, ale můžete použít jakýkoli název, pokud tento název použijete ve všech objektech SqliteConnection, které zahájíte instanci.

V konstruktoru souboru App.xaml.cs vašeho UWP projektu zavolejte metodu InitializeDatabase třídy DataAccess.

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

    DataAccess.InitializeDatabase();
}

Vložení dat do databáze SQLite

Přidejte metodu do třídy DataAccess, která vkládá data do databáze SQLite. Tento kód používá parametry v dotazu, aby se zabránilo útokům prostřednictvím injektáže SQL.

public static void AddData(string inputText)
{
    string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
    using (SqliteConnection db =
      new SqliteConnection($"Filename={dbpath}"))
    {
        SQLitePCL.Batteries.Init();
        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();
    }

}

Načtení dat z databáze SQLite

Přidejte metodu, která získá řádky dat z databáze SQLite.

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));
        }
    }

    return entries;
}

Metoda Read prochází řádky vrácených dat. Vrátí true, pokud jsou řádky vlevo, jinak vrátí false.

Metoda GetString vrátí hodnotu zadaného sloupce jako řetězec. Přijímá celočíselnou hodnotu, která představuje nulový index sloupce požadovaných dat. Můžete použít podobné metody, jako je GetDataTime a GetBoolean. Zvolte metodu na základě typu dat, která sloupec obsahuje.

Řadový parametr není v tomto příkladu tak důležitý, protože vybíráme všechny položky v jednom sloupci. Pokud je však součástí dotazu více sloupců, použijte řadovou hodnotu k získání sloupce, ze kterého chcete načíst data.

Přidání základního uživatelského rozhraní

Do souboru MainPage.xaml projektu UPW přidejte následující kód 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>

Toto základní uživatelské rozhraní umožňuje uživateli použít TextBox, které lze použít k zadání řetězce, který přidáme do databáze SQLite. Připojíme Button v tomto uživatelském rozhraní k obsluze událostí, která načte data z databáze SQLite a následně tato data zobrazí v ListView.

Do souboru MainPage.xaml.cs přidejte následující obslužnou rutinu. Toto je metoda, kterou jsme přidružli k události ClickButton v uživatelském rozhraní.

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

    Output.ItemsSource = DataAccess.GetData();
}

Také chceme mít jistotu, že se při spuštění aplikace načtou všechna existující data. Přidejte do konstruktoru MainPage řádek kódu pro volání GetData().

public MainPage()
{
    this.InitializeComponent();

    Output.ItemsSource = DataAccess.GetData();
}

To je to. Prozkoumejte Microsoft.Data.Sqlite a zjistěte, co dalšího můžete s databází SQLite dělat. Podívejte se na následující odkazy a seznamte se s dalšími způsoby použití dat v aplikaci pro UPW.

Další kroky

Připojení aplikace přímo k databázi SQL Serveru

Viz Použití databáze SQL Serveru v aplikaci pro UPW.

Sdílení kódu mezi různými aplikacemi na různých platformách

Viz Sdílení kódu mezi desktopem a UWP.

Přidejte stránky hlavního a detailního zobrazení s back-endy Azure SQL

Viz ukázkovádatabáze objednávek zákazníků .