Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
SQLite menyediakan solusi database yang andal dan ringan untuk menyimpan data secara lokal di aplikasi Windows. Tidak seperti sistem database tradisional yang memerlukan penginstalan server terpisah dan konfigurasi kompleks, SQLite berjalan sepenuhnya dalam proses aplikasi Anda dan menyimpan data dalam satu file di perangkat pengguna.
Tutorial ini menunjukkan kepada Anda cara mengintegrasikan SQLite ke dalam aplikasi WinUI Anda menggunakan pustaka akses data yang direkomendasikan Microsoft. Anda akan belajar menyiapkan database, membuat tabel, dan menerapkan operasi data dasar—sekaligus mengikuti praktik terbaik keamanan untuk melindungi dari kerentanan umum.
Apa yang akan Anda capai
Dalam tutorial ini, Anda akan mempelajari cara:
- Mengonfigurasi aplikasi Windows Anda untuk menggunakan SQLite dengan pustaka Microsoft.Data.SQLite
- Membuat dan menginisialisasi database lokal
- Menerapkan metode penyisipan dan pengambilan data yang aman
- Membangun antarmuka pengguna sederhana untuk berinteraksi dengan data Anda
Prasyarat
Untuk menyelesaikan tutorial ini, Anda memerlukan:
- Visual Studio 2022 atau yang lebih baru dengan beban kerja pengembangan aplikasi WinUI
- Pemahaman dasar tentang C# dan XAML
- Memahami konsep database dasar
Peningkatan utama yang ditawarkan pendekatan ini
Menggunakan SQLite untuk penyimpanan data lokal di aplikasi Windows Anda menawarkan beberapa keuntungan:
- Penyebaran yang disederhanakan: Tidak diperlukan penginstalan server database terpisah
- Keamanan yang ditingkatkan: Data tetap lokal di perangkat pengguna
- Peningkatan performa: Akses file langsung menghilangkan latensi jaringan
- Kompleksitas berkurang: Database file tunggal menyederhanakan pencadangan dan migrasi
Teknik yang akan Anda pelajari berlaku untuk aplikasi Windows apa pun yang perlu menyimpan data terstruktur secara lokal, dari penyimpanan pengaturan sederhana hingga skenario manajemen data yang kompleks.
Petunjuk / Saran
Anda dapat menggunakan bantuan AI untuk membantu menghindari serangan injeksi SQL di SQLite.
Manfaat SQLite untuk penyimpanan lokal
✔️ SQLite ringan dan mandiri. Ini adalah pustaka kode tanpa dependensi lain. Tidak ada yang perlu dikonfigurasi.
✔️ Tidak ada server database. Klien dan server berjalan dalam proses yang sama.
✔️ SQLite berada di domain publik sehingga Anda dapat dengan bebas menggunakan dan mendistribusikannya dengan aplikasi Anda.
✔️ SQLite berfungsi di seluruh platform dan arsitektur.
Anda dapat membaca lebih lanjut tentang SQLite di sini.
Pilih lapisan abstraksi
Kami menyarankan agar Anda menggunakan Entity Framework Core atau pustaka SQLite sumber terbuka yang dibangun oleh Microsoft.
Entity Framework Core
Entity Framework (EF) adalah pemeta relasional objek yang dapat Anda gunakan untuk bekerja dengan data relasional dengan menggunakan objek khusus domain. Jika Anda telah menggunakan kerangka kerja ini untuk bekerja dengan data di aplikasi .NET lainnya, Anda dapat menggunakan kode yang sama di aplikasi WinUI Dan itu akan berfungsi dengan perubahan yang sesuai pada string koneksi.
Untuk mencobanya, lihat Memulai EF Core.
Pustaka SQLite
Pustaka Microsoft.Data.Sqlite mengimplementasikan antarmuka di namespace Layanan System.Data.Common . Microsoft secara aktif mempertahankan implementasi ini, dan mereka menyediakan pembungkus intuitif di sekitar SQLite API asli tingkat rendah.
Sisa panduan ini membantu Anda menggunakan pustaka ini.
Menyiapkan solusi Anda untuk menggunakan pustaka Microsoft.Data.SQLite
Kita akan mulai dengan proyek WinUI dasar, lalu menginstal paket SQLite NuGet. Lihat Membuat aplikasi WinUI untuk petunjuk tentang cara membuat proyek WinUI pertama Anda.
Semua versi Windows yang didukung mendukung SQLite, sehingga aplikasi Anda tidak perlu mengemas pustaka SQLite. Sebagai gantinya, aplikasi Anda dapat menggunakan versi SQLite yang diinstal dengan Windows. Ini membantu Anda dalam beberapa cara.
✔️ Mengurangi ukuran aplikasi Anda karena Anda tidak perlu mengunduh biner SQLite, lalu mengemasnya sebagai bagian dari aplikasi Anda.
✔️ Mencegah Anda harus mendorong versi baru aplikasi Anda kepada pengguna jika SQLite menerbitkan perbaikan penting pada bug dan kerentanan keamanan di SQLite. Versi Windows SQLite dikelola oleh Microsoft dalam koordinasi dengan SQLite.org.
✔️ Waktu pemuatan aplikasi berpotensi lebih cepat karena kemungkinan besar, versi SDK SQLite sudah akan dimuat ke dalam memori.
Mari kita mulai dengan menambahkan kelas ke proyek Anda bernama DataAccess. Jika Anda berencana untuk berbagi logika akses data dengan kode klien lain, Anda dapat menggunakan proyek pustaka kelas .NET untuk berisi kode akses data Anda, tetapi kami tidak akan menggunakannya dalam contoh kami.
Klik kanan solusi, lalu klik Kelola Paket NuGet untuk Solusi.
Pada titik ini, Anda memiliki pilihan. Anda dapat menggunakan versi SQLite yang disertakan dengan Windows atau jika Anda memiliki alasan untuk menggunakan versi SQLite tertentu, Anda dapat menyertakan pustaka SQLite dalam paket Anda. Kita akan menggunakan versi SQLite yang disertakan dengan Windows.
Pilih tab Telusuri , cari paket Microsoft.Data.SQLite , lalu instal versi stabil terbaru.
Menambahkan dan mengambil data dalam database SQLite
Kami akan melakukan hal-hal ini:
1️⃣ Siapkan kelas akses data.
2️⃣ Inisialisasi database SQLite.
3️⃣ Sisipkan data ke dalam database SQLite.
4️⃣ Mengambil data dari database SQLite.
5️⃣ Tambahkan antarmuka pengguna dasar.
Menyiapkan kelas akses data
DataAccess Buka kelas di proyek Anda dan buat kelas itu statis.
Catatan
Meskipun contoh akan menempatkan kode akses data Anda di kelas statis, ini adalah pilihan desain dan sepenuhnya opsional.
public static class DataAccess
{
}
Tambahkan pernyataan berikut using ke bagian atas file ini.
using Microsoft.Data.Sqlite;
using System.Collections.Generic;
Menginisialisasi database SQLite
Tambahkan metode ke DataAccess kelas yang menginisialisasi database 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 (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();
}
}
Catatan
Kode di atas yang menggunakan ApplicationData anggota hanya akan berfungsi untuk aplikasi paket yang berjalan dalam kontainer aplikasi. Semua aplikasi Windows lainnya harus mengakses ApplicationData anggota melalui kelas ApplicationDataManager .
Kode ini membuat database SQLite dan menyimpannya di penyimpanan data lokal aplikasi.
Dalam contoh ini, kami menamai database sqlliteSample.db tetapi Anda dapat menggunakan nama apa pun yang Anda inginkan selama Anda menggunakan nama tersebut di semua objek SqliteConnection yang Anda buat. Dalam aplikasi produksi, informasi koneksi seperti nama file database harus disimpan dalam konfigurasi aplikasi daripada dikodekan secara permanen (lihat Menambahkan Azure App Configuration dengan menggunakan Visual Studio Connected Services).
Di konstruktor file App.xaml.cs proyek Anda, panggil InitializeDatabase metode DataAccess kelas . Ini akan memastikan bahwa database dibuat atau dibuka setiap kali aplikasi dimulai.
public App()
{
this.InitializeComponent();
DataAccess.InitializeDatabase();
}
Menyisipkan data ke dalam database SQLite
Tambahkan metode ke DataAccess kelas yang menyisipkan data ke dalam database SQLite. Kode ini menggunakan parameter dalam kueri untuk mencegah serangan injeksi SQL.
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();
}
}
Mengambil data dari database SQLite
Tambahkan metode yang mendapatkan semua baris data dari tabel di database SQLite kami.
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;
}
Metode Baca maju melalui baris data yang dikembalikan. Ini mengembalikan true jika ada baris yang tersisa, jika tidak, baris akan falsemengembalikan .
Metode GetString mengembalikan nilai kolom yang ditentukan sebagai string. Ini menerima nilai bilangan bulat yang mewakili ordinal kolom berbasis nol dari data yang Anda inginkan. Anda dapat menggunakan metode serupa seperti GetDataTime dan GetBoolean. Pilih metode berdasarkan jenis data apa yang dikandung kolom.
Parameter ordinal tidak sepenting dalam contoh ini karena kita memilih semua entri dalam satu kolom. Namun, jika beberapa kolom adalah bagian dari kueri Anda, gunakan nilai ordinal untuk mendapatkan kolom tempat Anda ingin menarik data.
Menambahkan antarmuka pengguna dasar
Dalam file MainWindow.xaml proyek, tambahkan XAML berikut.
<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>
Antarmuka pengguna dasar ini memberi pengguna yang TextBox dapat mereka gunakan untuk mengetik string yang akan kita tambahkan ke database SQLite. Kita akan menyambungkan Button di UI ini ke penanganan aktivitas yang akan mengambil data dari database SQLite lalu memperlihatkan data tersebut ListViewdi .
Dalam file MainWindow.xaml.cs, tambahkan handler berikut. Ini adalah metode yang kami kaitkan dengan Click peristiwa Button di UI.
private void AddData(object sender, RoutedEventArgs e)
{
DataAccess.AddData(Input_Box.Text);
Output.ItemsSource = DataAccess.GetData();
}
Kami juga ingin memastikan bahwa data yang ada dimuat saat aplikasi dimulai. Tambahkan baris kode ke MainWindow konstruktor untuk memanggil GetData().
public MainWindow()
{
this.InitializeComponent();
Output.ItemsSource = DataAccess.GetData();
}
Itu saja. Jelajahi Microsoft.Data.Sqlite untuk melihat hal lain yang dapat Anda lakukan dengan database SQLite Anda. Lihat tautan di bawah ini untuk mempelajari cara lain menggunakan data di aplikasi Windows Anda.
Hindari serangan injeksi SQL
Kode dalam contoh ini menggunakan kueri berparameter untuk mencegah serangan injeksi SQL. Jangan pernah menggabungkan input pengguna ke dalam string kueri SQL. Selalu gunakan parameter. Anda dapat meminta Copilot untuk tips lebih lanjut tentang menghindari serangan injeksi SQL.
Teks berikut menunjukkan contoh perintah untuk Copilot:
Can you provide some best practices to avoid SQL injection attacks when writing SQLite queries in C# code?
Copilot didukung oleh AI, sehingga kejutan dan kesalahan dimungkinkan. Untuk informasi selengkapnya, lihat tanya jawab umum Copilot.
Konten terkait
Menyambungkan aplikasi Anda langsung ke database SQL Server
Lihat Menggunakan database SQL Server di aplikasi Windows.
Berbagi kode antara aplikasi yang berbeda di berbagai platform
Lihat Berbagi kode antara desktop dan UWP.
Menambahkan halaman detail master dengan back end Azure SQL
Lihat Sampel Database Pesanan Pelanggan.
Windows developer