Bagikan melalui


Tutorial: Menggunakan database SQL Server di aplikasi Windows

Aplikasi Anda dapat terhubung langsung ke database SQL Server lalu menyimpan dan mengambil data dengan menggunakan kelas di namespace System.Data.SqlClient.

Memulai

Dalam panduan ini, kami akan menunjukkan kepada Anda salah satu cara untuk melakukannya di aplikasi yang menggunakan Windows App SDK. Jika Anda menginstal database sampel Northwind ke instans SQL Server Anda, lalu menggunakan cuplikan ini, Anda akan berakhir dengan UI dasar yang menampilkan produk dari database sampel Northwind.

Produk Northwind

Petunjuk

Anda juga bisa mendapatkan skrip untuk membuat database sampel Northwind dan pubs dari sampel SQL Server repositori GitHub.

Cuplikan yang muncul dalam panduan ini didasarkan pada aplikasi sampel UWP ini.

Pertama, siapkan solusi Anda

Untuk menyambungkan aplikasi langsung ke database SQL Server, aplikasi Anda dapat menargetkan versi minimum Windows yang didukung oleh Windows App SDK. Anda dapat menemukan informasi tersebut di halaman properti proyek Anda.

  1. Buka file Package.appxmanifest proyek Windows App SDK Anda di perancang manifes.
  2. Di tab Capabilities, pilih kotak centang Enterprise Authentication jika Anda menggunakan Autentikasi Windows untuk mengautentikasi SQL Server Anda.

Kemampuan Autentikasi Perusahaan

Penting

Anda juga perlu memilih Internet (Klien & Server), Internet (Klien), dan jaringan Private (Klien & Server), terlepas dari apakah Anda menggunakan Autentikasi Windows atau tidak.

Menambahkan dan mengambil data dalam database SQL Server

Di bagian ini, kita akan melakukan hal-hal ini:

1️⃣ Tambahkan string koneksi.

2️⃣ Buat kelas untuk menyimpan data produk.

3️⃣ Mengambil produk dari database SQL Server.

4️⃣ Tambahkan antarmuka pengguna dasar.

5️⃣ Isi UI dengan Produk.

Catatan

Bagian ini mengilustrasikan salah satu cara untuk mengatur kode akses data Anda. Ini dimaksudkan hanya untuk memberikan contoh bagaimana Anda dapat menggunakan System.Data.SqlClient untuk menyimpan dan mengambil data dari database SQL Server. Anda dapat mengatur kode Anda dengan cara apa pun yang paling masuk akal untuk desain aplikasi Anda.

Tambahkan connection string

Dalam file App.xaml.cs, tambahkan properti ke kelas App, yang memberi kelas lain dalam akses solusi Anda ke connection string.

String koneksi kami menunjuk ke database Northwind dalam instans SQL Server Express. connection string dalam cuplikan ini mengasumsikan Anda menyimpan nama instans default SQLEXPRESS saat menginstal SQL Server Express. Anda dapat membuat perubahan pada connection string agar sesuai dengan instans, database, dan metode autentikasi SQL Server Anda.

sealed partial class App : Application
{
    // Connection string for using Windows Authentication.
    private string connectionString =
        @"Data Source=.\SQLEXPRESS;Initial Catalog=NORTHWIND;Integrated Security=SSPI";

    public string ConnectionString { get => connectionString; set => connectionString = value; }

    ...
}

Penting

Dalam aplikasi produksi, informasi koneksi harus disimpan dengan aman dalam konfigurasi aplikasi (lihat Tambahkan Azure App Configuration dengan menggunakan Visual Studio Connected Services). String koneksi dan rahasia lainnya tidak boleh dikodekan secara permanen.

Membuat kelas untuk menyimpan data produk

Kami akan membuat kelas yang mengimplementasikan peristiwa INotifyPropertyChanged sehingga kami dapat mengikat atribut di UI XAML kami ke properti di kelas ini.

public class Product : INotifyPropertyChanged
{
    public int ProductID { get; set; }
    public string ProductCode { get { return ProductID.ToString(); } }
    public string ProductName { get; set; }
    public string QuantityPerUnit { get; set; }
    public decimal UnitPrice { get; set; }
    public string UnitPriceString { get { return UnitPrice.ToString("######.00"); } }
    public int UnitsInStock { get; set; }
    public string UnitsInStockString { get { return UnitsInStock.ToString("#####0"); } }
    public int CategoryId { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Mengambil produk dari database SQL Server

Dalam file MainWindow.xaml.cs dari proyek Windows App SDK, buat sebuah fungsi yang mengambil produk dari database sampel Northwind, kemudian mengembalikannya sebagai koleksi ObservableCollection dari instans Product.

public ObservableCollection<Product> GetProducts(string connectionString)
{
    const string GetProductsQuery = "select ProductID, ProductName, QuantityPerUnit," +
       " UnitPrice, UnitsInStock, Products.CategoryID " +
       " from Products inner join Categories on Products.CategoryID = Categories.CategoryID " +
       " where Discontinued = 0";

    var products = new ObservableCollection<Product>();
    try
    {
        using (var conn = new SqlConnection(connectionString))
        {
            conn.Open();
            if (conn.State == System.Data.ConnectionState.Open)
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = GetProductsQuery;
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var product = new Product();
                            product.ProductID = reader.GetInt32(0);
                            product.ProductName = reader.GetString(1);
                            product.QuantityPerUnit = reader.GetString(2);
                            product.UnitPrice = reader.GetDecimal(3);
                            product.UnitsInStock = reader.GetInt16(4);
                            product.CategoryId = reader.GetInt32(5);
                            products.Add(product);
                        }
                    }
                }
            }
        }
        return products;
    }
    catch (Exception eSql)
    {
        Debug.WriteLine($"Exception: {eSql.Message}");
    }
    return null;
}

Menambahkan antarmuka pengguna dasar

Tambahkan XAML berikut ke file MainWindow.xaml proyek Windows App SDK.

XAML ini membuat ListView untuk menampilkan setiap produk yang Anda kembalikan di cuplikan sebelumnya, dan mengikat atribut setiap baris di ListView ke properti yang kami tentukan di Product kelas .

<Grid Background="{ThemeResource SystemControlAcrylicWindowBrush}">
    <RelativePanel>
        <ListView Name="InventoryList"
                  SelectionMode="Single"
                  ScrollViewer.VerticalScrollBarVisibility="Auto"
                  ScrollViewer.IsVerticalRailEnabled="True"
                  ScrollViewer.VerticalScrollMode="Enabled"
                  ScrollViewer.HorizontalScrollMode="Enabled"
                  ScrollViewer.HorizontalScrollBarVisibility="Auto"
                  ScrollViewer.IsHorizontalRailEnabled="True"
                  Margin="20">
            <ListView.HeaderTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal"  >
                        <TextBlock Text="ID" Margin="8,0" Width="50" Foreground="DarkRed" />
                        <TextBlock Text="Product description" Width="300" Foreground="DarkRed" />
                        <TextBlock Text="Packaging" Width="200" Foreground="DarkRed" />
                        <TextBlock Text="Price" Width="80" Foreground="DarkRed" />
                        <TextBlock Text="In stock" Width="80" Foreground="DarkRed" />
                    </StackPanel>
                </DataTemplate>
            </ListView.HeaderTemplate>
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="local:Product">
                    <StackPanel Orientation="Horizontal" >
                        <TextBlock Name="ItemId"
                                    Text="{x:Bind ProductCode}"
                                    Width="50" />
                        <TextBlock Name="ItemName"
                                    Text="{x:Bind ProductName}"
                                    Width="300" />
                        <TextBlock Text="{x:Bind QuantityPerUnit}"
                                   Width="200" />
                        <TextBlock Text="{x:Bind UnitPriceString}"
                                   Width="80" />
                        <TextBlock Text="{x:Bind UnitsInStockString}"
                                   Width="80" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </RelativePanel>
</Grid>

Tampilkan produk di ListView

Buka file MainWindow.xaml.cs, dan tambahkan kode ke konstruktor MainWindow kelas yang mengatur properti ItemSource dari ListView ke dalam ObservableCollection dari instansiProduct.

public MainWindow()
{
    this.InitializeComponent();
    InventoryList.ItemsSource = GetProducts((App.Current as App).ConnectionString);
}

Mulai proyek dan lihat produk dari database sampel Northwind muncul di UI.

Produk Northwind

Jelajahi namespace System.Data.SqlClient untuk melihat hal lain yang dapat Anda lakukan dengan data di database SQL Server Anda.

Petunjuk

Coba minta bantuan Microsoft Copilot untuk bantuan terkait kueri SQL Anda. Copilot dapat membantu Anda menulis kueri SQL, dan menyarankan cara untuk meningkatkan kode Anda.

Masalah saat menyambungkan ke database Anda?

Dalam kebanyakan kasus, beberapa aspek konfigurasi SQL Server perlu diubah. Jika Anda dapat menyambungkan ke database Anda dari jenis aplikasi desktop lain seperti aplikasi Windows Forms atau WPF, pastikan Anda telah mengaktifkan TCP/IP untuk SQL Server. Anda dapat melakukannya di konsol Manajemen Komputer. (Lihat Alat Windows/Alat Administratif untuk informasi selengkapnya.)

Manajemen Komputer

Kemudian, pastikan layanan Browser SQL Server Anda berjalan.

SQL Server Browser Service

Langkah selanjutnya