Bagikan melalui


Menggunakan database SQLite di aplikasi Windows

Anda dapat menggunakan SQLite untuk menyimpan dan mengambil data dalam database ringan di perangkat pengguna. Panduan ini menunjukkan kepada Anda cara melakukannya di aplikasi SDK Aplikasi Windows Anda.

Beberapa manfaat menggunakan 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 SDK Aplikasi Windows Anda dan 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 SDK Aplikasi Windows dasar, lalu menginstal paket SQLite NuGet.

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.

  1. Klik kanan solusi, lalu klik Kelola Paket NuGet untuk Solusi.

    Cuplikan layar Penjelajah Solusi Visual Studio dengan proyek diklik kanan dan opsi Kelola Paket NuGet disorot.

    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.

  2. Pilih tab Telusuri , cari paket Microsoft.Data.SQLite , lalu instal versi stabil terbaru.

    Paket SQLite NuGet

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 kami akan menempatkan kode akses data 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.

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.