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.
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.
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 false
ad 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.