Megosztás a következőn keresztül:


SQLite-adatbázis használata UWP-alkalmazásban

Az SQLite használatával adatokat tárolhat és lekérhet egy egyszerű adatbázisban a felhasználó eszközén. Ez az útmutató bemutatja, hogyan.

Az SQLite helyi tároláshoz való használatának néhány előnye

✔️ Az SQLite könnyű és önálló. Ez egy kódtár más függőségek nélkül. Nincs mit konfigurálni.

✔️ Nincs adatbázis-kiszolgáló. Az ügyfél és a kiszolgáló ugyanabban a folyamatban fut.

✔️ Az SQLite nyilvános tartományban van, így szabadon használhatja és terjesztheti az alkalmazással.

✔️ Az SQLite platformokat és architektúrákat használ.

Az SQLite -ról ittolvashat bővebben.

Absztrakciós réteg kiválasztása

Javasoljuk, hogy használja az Entity Framework Core-t vagy a Microsoft által létrehozott nyílt forráskódú SQLite-kódtárat.

Entity Framework Core

Az Entity Framework (EF) egy objektum-relációs leképező, amellyel tartományspecifikus objektumok használatával dolgozhat relációs adatokkal. Ha már használta ezt a keretrendszert más .NET-alkalmazások adatainak kezelésére, migrálhatja ezt a kódot egy UWP-alkalmazásba, és az a kapcsolati sztring megfelelő módosításaival fog működni.

A kipróbálásához tekintse meg Az első lépések az EF Core-ral.

SQLite-kódtár

A Microsoft.Data.Sqlite kódtár implementálja a System.Data.Common névtér felületeit. A Microsoft aktívan fenntartja ezeket az implementációkat, és intuitív burkolót biztosítanak az alacsony szintű natív SQLite API körül.

Az útmutató további része segítséget nyújt a kódtár használatához.

A megoldás beállítása a Microsoft.Data.SQlite kódtár használatára

Először egy alapszintű UWP-projekttel kezdjük, majd telepítjük a megfelelő Nuget-csomagokat.

Jegyzet

Győződjön meg arról, hogy telepíti a Microsoft.Data.Sqlite' package and not 'Microsoft.Data.Sqlite.Core. Ez a csomag függőségként telepíti Microsoft.Data.Sqlite.Core.

A Windows összes támogatott verziója támogatja az SQLite-t, így az alkalmazásnak nem kell SQLite-kódtárakat csomagolnia. Ehelyett az alkalmazás használhatja a Windowshoz telepített SQLite-verziót. Ez segít néhány módon.

✔️ Csökkenti az alkalmazás méretét, mert nem kell letöltenie az SQLite bináris fájlt, majd az alkalmazás részeként kell csomagolnia.

✔️ Megakadályozza, hogy leküldje az alkalmazás új verzióját a felhasználóknak abban az esetben, ha az SQLite kritikus javításokat tesz közzé az SQLite hibáihoz és biztonsági réseihez. Az SQLite Windows-verzióját a Microsoft a SQLite.org koordinálva tartja fenn.

✔️ Az alkalmazásbetöltési idő gyorsabb lehet, mert valószínűleg az SQLite SDK-verziója már betöltődik a memóriába.

Először adjunk hozzá egy osztályt a DataAccessnevű UWP-projekthez. Egy .NET Standard osztálykönyvtár projekt segítségével is elhelyezheti az adatelérési kódját, de a példánkban nem használunk ilyet.

Kattintson a jobb gombbal a megoldásra, majd kattintson Megoldáshoz készült NuGet-csomagok kezeléseparancsra.

Másik képernyőkép a Megoldáskezelő panelről, amelyen a projektre a jobb gombbal kattintott, és a NuGet-csomagok kezelése lehetőség ki van emelve.

Ezen a ponton van egy választás. Használhatja a Windowsban található SQLite-verziót, vagy ha van valamilyen oka az SQLite egy adott verziójának használatára, az SQLite-kódtárat is belefoglalhatja a csomagba. A Windowshoz mellékelt SQLite-verziót fogjuk használni.

Válassza a Tallózás lapot, keresse meg a Microsoft.Data.SQLite.Core csomagot, majd telepítse a legújabb stabil verziót.

SQLite Core-csomag

Adatok hozzáadása és lekérése SQLite-adatbázisban

A következő műveleteket hajtjuk végre:

1️⃣ Az adatelérési osztály előkészítése.

2️⃣ Inicializálja az SQLite-adatbázist.

3️⃣ Adatok beszúrása az SQLite-adatbázisba.

4️⃣ Adatok lekérése az SQLite-adatbázisból.

5️⃣ Egyszerű felhasználói felület hozzáadása.

Az adatelérési osztály előkészítése

Nyissa meg a DataAccess osztályt a projektben, és állítsa statikussá az osztályt.

Jegyzet

Bár a példánk egy statikus osztályba helyezi az adatelérési kódot, ez csak egy tervezési lehetőség, és teljesen opcionális.

public static class DataAccess
{

}

Adja hozzá a következő using utasításokat a fájl elejéhez.

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

Az SQLite-adatbázis inicializálása

Adjon hozzá egy metódust a DataAccess osztályhoz, amely inicializálja az SQLite-adatbázist.

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

Ez a kód létrehozza az SQLite-adatbázist, és az alkalmazás helyi adattárában tárolja.

Ebben a példában elnevezzük az adatbázist sqlliteSample.db, de bármilyen nevet használhat, amíg ezt a nevet minden SqliteConnection példányosított objektumban használja.

Az UWP-projekt App.xaml.cs fájljának konstruktorában hívja meg a DataAccess osztály InitializeDatabase metódusát.

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

    DataAccess.InitializeDatabase();
}

Adatok beszúrása az SQLite-adatbázisba

Adjon hozzá egy metódust a DataAccess osztályhoz, amely adatokat szúr be az SQLite-adatbázisba. Ez a kód paramétereket használ a lekérdezésben az SQL-injektálási támadások megelőzésére.

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

}

Adatok lekérése az SQLite-adatbázisból

Adjon hozzá egy metódust, amely adatsorokat kap egy SQLite-adatbázisból.

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

Az Olvasás metódus a visszaadott adatok sorain halad előre. true ad vissza, ha vannak hátrasorok, ellenkező esetben falsead vissza.

A GetString metódus a megadott oszlop értékét adja vissza sztringként. Egy egész számértéket fogad el, amely a kívánt adatok nullaalapú oszlop-sorszámát jelöli. Hasonló módszereket használhat, például GetDataTime és GetBoolean. Válasszon egy metódust az oszlopban található adatok típusa alapján.

A sorszám paraméter ebben a példában nem olyan fontos, mert egyetlen oszlopban lévő összes bejegyzést kiválasztjuk. Ha azonban több oszlop is része a lekérdezésnek, a sorszámérték használatával szerezze be azt az oszlopot, amelyből adatokat szeretne lekérni.

Egyszerű felhasználói felület hozzáadása

Az UWP-projekt MainPage.xaml fájljában adja hozzá a következő XAML-t.

<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>

Ez az alapszintű felhasználói felület egy TextBox biztosít a felhasználónak, amellyel beírhat egy sztringet, amelyet hozzáadunk az SQLite-adatbázishoz. A felhasználói felületen található Button egy eseménykezelőhöz csatlakoztatjuk, amely adatokat kér le az SQLite-adatbázisból, majd megjeleníti az adatokat a ListView.

A MainPage.xaml.cs fájlban adja hozzá a következő kezelőt. Ez az a módszer, amelyet a felhasználói felületen a Button alatti Click eseményhez társítottunk.

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

    Output.ItemsSource = DataAccess.GetData();
}

Azt is szeretnénk, hogy az alkalmazás indításakor minden meglévő adat be legyen töltve. Adjon hozzá egy kódsort a MainPage konstruktorhoz a GetData()meghívásához.

public MainPage()
{
    this.InitializeComponent();

    Output.ItemsSource = DataAccess.GetData();
}

Ennyi. Fedezze fel a Microsoft.Data.Sqlite -t, hogy megtekintse, milyen egyéb műveleteket végezhet az SQLite-adatbázissal. Az alábbi hivatkozásokon megismerheti az adatok UWP-alkalmazásban való használatának egyéb módjait.

Következő lépések

Az alkalmazás közvetlen csatlakoztatása SQL Server-adatbázishoz

Lásd: SQL Server-adatbázis használata UWP-alkalmazásban.

Kód megosztása különböző alkalmazások között különböző platformokon

Lásd: Kód megosztása asztali és UWPközött.

Mester-részlet oldalak hozzáadása az Azure SQL háttérrendszereivel

Lásd a Vevői rendelési adatbázis minta.