Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
SQLite megbízható, egyszerű adatbázismegoldást biztosít az adatok helyi tárolásához Windows alkalmazásokban. A különálló kiszolgálótelepítéseket és összetett konfigurációkat igénylő hagyományos adatbázisrendszerektől eltérően az SQLite teljes mértékben az alkalmazásfolyamaton belül fut, és egyetlen fájlban tárolja az adatokat a felhasználó eszközén.
Ez az oktatóanyag bemutatja, hogyan integrálhatja az SQLite-t a WinUI-alkalmazásba a Microsoft ajánlott adatelérési kódtárai segítségével. Megtudhatja, hogyan állíthat be adatbázist, hozhat létre táblákat és valósíthat meg alapvető adatműveleteket – mindezt a gyakori biztonsági rések elleni védelemhez ajánlott biztonsági eljárások követésével.
Mit fog elérni?
Ebben az oktatóanyagban megtanulhatja, hogyan:
- A Windows alkalmazás konfigurálása SQLite használatára a Microsoft.Data.SQLite könyvtárral
- Helyi adatbázis létrehozása és inicializálása
- Biztonságos adatbeszúrási és lekérési módszerek implementálása
- Egyszerű felhasználói felület létrehozása az adatok kezeléséhez
Előfeltételek
Az oktatóanyag elvégzéséhez a következőkre van szüksége:
- Visual Studio 2026 vagy újabb WinUI alkalmazásfejlesztési munkaterheléssel
- A C# és az XAML alapszintű ismerete
- Az alapvető adatbázis-fogalmak ismertetése
A megközelítés fő fejlesztései
Az SQLite használata a Windows-alkalmazásban való helyi adattároláshoz számos előnnyel jár:
- Egyszerűsített üzembe helyezés: Nincs szükség külön adatbázis-kiszolgáló telepítésére
- Fokozott biztonság: Az adatok helyiek maradnak a felhasználó eszközén
- Jobb teljesítmény: A közvetlen fájlhozzáférés kiküszöböli a hálózati késést
- Csökkentett összetettség: Az egyfájlos adatbázis leegyszerűsíti a biztonsági mentést és a migrálást
Az elsajátított technikák minden olyan Windows alkalmazásra érvényesek, amelyeknek strukturált adatokat kell helyileg tárolniuk, az egyszerű beállítástárolástól az összetett adatkezelési forgatókönyvekig.
Jótanács
Az AI-segítség segítségével elkerülheti az SQL-injektálási támadásokat az SQLite-ben.
Az SQLite előnyei a helyi tároláshoz
✔️ 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 itt olvashat bővebben.
Absztrakciós réteg kiválasztása
Javasoljuk, hogy Entity Framework Core vagy a Microsoft által létrehozott nyílt forráskódú SQLite könyvtárat használja.
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, ugyanazt a kódot használhatja a WinUI-alkalmazásban, és az a connection string megfelelő módosításokkal fog működni.
A kipróbálásához tekintse meg az EF Core használatának első lépéseit.
SQLite-kódtár
A Microsoft.Data.Sqlite kódtár a System.Data.Common névtérben implementálja a felületeket. 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ű WinUI-projekttel kezdjük, majd telepítjük az SQLite NuGet-csomagot. Az első WinUI-projekt létrehozásához tekintse meg a WinUI-alkalmazás létrehozásával kapcsolatos utasításokat.
Az 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 Windows 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 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 DataAccess nevű osztályt a projekthez. Ha meg szeretné osztani az adatelérési logikát más ügyfélkódokkal, használhat egy .NET osztálykódtár-projektet az adatelérési kód használatára, de a példánkban nem használunk egyet.
Kattintson a jobb gombbal a megoldásra, majd kattintson a Megoldás nuGet-csomagjainak kezelése parancsra.
Ezen a ponton van egy választás. Használhatja a Windows részét képező 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 Windows tartalmazott SQLite-verziót fogjuk használni.
Válassza a Tallózás lapot, keresse meg a Microsoft.Data.SQLite 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 az DataAccess osztályt a projektben, és állítsa statikussá az osztályt.
Megjegyzés:
Bár a példa statikus osztályba helyezi az adatelérési kódot, ez 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 az DataAccess SQLite-adatbázist inicializáló osztályhoz.
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 (var 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)";
var createTable = new SqliteCommand(tableCommand, db);
createTable.ExecuteReader();
}
}
Megjegyzés:
A fenti, tagokat használó ApplicationData kód csak az alkalmazástárolóban futó csomagolt alkalmazásokhoz fog működni. Minden más Windows-alkalmazásnak hozzá kell férnie ApplicationData tagokhoz a ApplicationDataManager osztályon keresztül.
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 használja az összes példányosított SqliteConnection-objektumban . Éles alkalmazásokban a kapcsolati adatokat, például az adatbázis fájlnevét az alkalmazáskonfigurációban kell tárolni, nem pedig közvetlenül beágyazva (lásd: Az Azure App Configuration hozzáadása Visual Studio csatlakoztatott szolgáltatások használatával).
A projekt App.xaml.cs fájljának konstruktorában hívja meg az InitializeDatabaseDataAccess osztály metódusát. Ez biztosítja, hogy az adatbázis az alkalmazás minden indításakor létrejön vagy meg legyen nyitva.
public App()
{
this.InitializeComponent();
DataAccess.InitializeDatabase();
}
Adatok beszúrása az SQLite-adatbázisba
Adjon hozzá egy metódust az 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 (var db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
var 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 lekéri az összes adatsort egy táblából az SQLite-adatbázisban.
public static List<string> GetData()
{
var entries = new List<string>();
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path,
"sqliteSample.db");
using (var db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
var 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ási módszer halad végig a visszaadott adatok sorain. Akkor ad true vissza, ha vannak hátrasorok, ellenkező esetben ad vissza false.
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 is használhat, mint például a GetDataTime és a 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
A projekt MainWindow.xaml fájljában adja hozzá a következő XAML-t.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<TextBox x:Name="Input_Box"/>
<Button Click="AddData">Add</Button>
<ListView x:Name="Output">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</Grid>
Ez az alapszintű felhasználói felület lehetővé teszi a felhasználó TextBox számára, hogy beírjon egy karakterláncot, amelyet hozzáadunk az SQLite-adatbázishoz. A felhasználói felületet egy eseménykezelőhöz csatlakoztatjuk Button , amely adatokat kér le az SQLite-adatbázisból, majd megjeleníti az adatokat a ListView.
A MainWindow.xaml.cs fájlban adja hozzá a következő kezelőt. Ez az a módszer, amelyet a felhasználói felület Click eseményéhez társítottunk Button.
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 MainWindow konstruktorhoz, hogy meghívja GetData()-t.
public MainWindow()
{
this.InitializeComponent();
Output.ItemsSource = DataAccess.GetData();
}
Ennyi az egész. A Microsoft.Data.Sqlite segítségével megtudhatja, milyen egyéb műveleteket végezhet az SQLite-adatbázissal. Tekintse meg az alábbi hivatkozásokat, amelyekből megtudhatja, hogyan használhatja az adatokat az Windows-alkalmazásokban.
Sql-injektálási támadások elkerülése
A példában szereplő kód paraméteres lekérdezéseket használ az SQL-injektálási támadások megelőzésére. Soha ne fűzse össze a felhasználói bemenetet SQL-lekérdezési sztringgel. Mindig használjon paramétereket. Kérhet további tippeket a Copilottól az SQL-injektálási támadások elkerüléséhez.
Az alábbi szöveg egy példautasítást jelenít meg a Copilot számára.
Can you provide some best practices to avoid SQL injection attacks when writing SQLite queries in C# code?
Copilot mesterséges intelligencián alapuló, így meglepetések és hibák is lehetségesek. További információ: Copilot GYIK.
Kapcsolódó tartalom
Az alkalmazás csatlakoztatása közvetlenül egy SQL Server-adatbázishoz
Lásd: Az SQL Server-adatbázis használata Windows 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 UWP között.
Mesteroldalak hozzáadása Azure SQL háttérrendszerrel
Windows developer