Sdílet prostřednictvím


Kurz: Použití SQL Server databáze v aplikaci Windows

Aplikace se může připojit přímo k databázi SQL Server a pak ukládat a načítat data pomocí tříd v oboru názvů System.Data.SqlClient.

Začínáme

V této příručce vám ukážeme jeden způsob, jak to udělat v aplikacích, které používají Windows App SDK. Pokud nainstalujete ukázkovou databázi Northwind do instance SQL Server a pak použijete tyto fragmenty kódu, budete mít základní uživatelské rozhraní, které zobrazuje produkty z ukázkové databáze Northwind.

Produkty Northwind

Návod

Můžete také získat skripty pro vytvoření ukázkových databází Northwind a pubs z úložiště SQL Server Ukázky GitHub.

Fragmenty kódu, které se zobrazí v této příručce, jsou založené na této ukázkové aplikaci pro UPW.

Nejprve nastavte řešení.

Pokud chcete aplikaci připojit přímo k databázi SQL Server, může aplikace cílit na libovolnou minimální verzi Windows podporovanou Windows App SDK. Informace najdete na stránce vlastností projektu.

  1. Otevřete soubor Package.appxmanifest projektu Windows App SDK v návrháři manifestu.
  2. Na kartě Capabilities zaškrtněte políčko Enterprise Authentication pokud k ověřování SQL Server používáte ověřování Windows.

Možnosti podnikového ověřování

Důležité

Budete také muset vybrat Internet (Klient & Server), Internet (klient) a Private Networks (Klient & Server) bez ohledu na to, jestli používáte ověřování Windows.

Přidání a načtení dat v databázi SQL Server

V této části provedeme tyto akce:

1️⃣ Přidat připojovací řetězec.

2️⃣ Vytvořte třídu pro uchovávání dat produktu.

3️⃣ Načíst produkty z databáze SQL Server.

4️⃣ Přidat základní uživatelské rozhraní.

5️⃣ naplňte uživatelské rozhraní produkty.

Poznámka:

Tato část ukazuje jeden ze způsobů, jak uspořádat kód pro přístup k datům. Účelem je pouze poskytnout příklad použití System.Data.SqlClient k ukládání a načítání dat z databáze SQL Server. Kód můžete uspořádat jakýmkoli způsobem, který dává smysl pro návrh vaší aplikace.

Přidejte řetězec připojení

V souboru App.xaml.cs přidejte do třídy App vlastnost, která poskytuje ostatním třídám v řešení přístup k connection string.

Náš připojovací řetězec odkazuje na databázi Northwind v instanci SQL Server Express. Connection string v tomto fragmentu kódu předpokládá, že při instalaci SQL Server Expressu jste ponechali výchozí název instance SQLEXPRESS. V connection string můžete provádět změny tak, aby odpovídaly vaší instanci, databázi a metodě ověřování SQL Server.

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; }

    ...
}

Důležité

V produkčních aplikacích by se informace o připojení měly bezpečně ukládat v konfiguraci aplikace (viz Adding Azure App Configuration pomocí Visual Studio Connected Services). Připojovací řetězce a další tajné kódy by nikdy neměly být pevně zakódované.

Vytvoření třídy pro uchovávání dat o produktech

Vytvoříme třídu, která implementuje INotifyPropertyChanged událost, abychom mohli svázat atributy v uživatelském rozhraní XAML s vlastnostmi v této třídě.

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));
    }
}

Načtení produktů z databáze SQL Server

V souboru MainWindow.xaml.cs projektu Windows App SDK vytvořte metodu, která získá produkty z ukázkové databáze Northwind, a pak je vrátí jako ObservableCollection kolekce Product instancí.

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;
}

Přidání základního uživatelského rozhraní

Do souboru MainWindow.xaml projektu Windows App SDK přidejte následující kód XAML.

Tento XAML vytvoří ListView pro zobrazení každého produktu, který jste vrátili v předchozím fragmentu kódu, a vytvoří vazbu atributů každého řádku na ListView vlastnosti, které jsme definovali ve Product třídě.

<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>

Zobrazení produktů v zobrazení ListView

Otevřete soubor MainWindow.xaml.cs a přidejte kód do konstruktoru třídy MainWindow, který nastaví vlastnost ItemSource u ListView na ObservableCollection instancí Product.

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

Spusťte projekt a prohlédněte si produkty z ukázkové databáze Northwind v uživatelském rozhraní.

Produkty Northwind

Prozkoumejte obor názvů System.Data.SqlClient a zjistěte, co dalšího můžete s daty v databázi SQL Server dělat.

Návod

Zkuste požádat Microsoft Copilot o pomoc s dotazy SQL. Copilot vám můžou pomoct psát dotazy SQL a navrhovat způsoby, jak kód vylepšit.

Máte potíže s připojením k databázi?

Ve většině případů je potřeba změnit některé aspekty konfigurace SQL Server. Pokud se ke své databázi můžete připojit z jiného typu desktopové aplikace, jako je Windows Forms nebo WPF aplikace, ujistěte se, že jste pro SQL Server povolili protokol TCP/IP. Můžete to udělat v konzole pro správu počítače . (Další informace najdete v tématu Windows Nástroje pro správu.)

Správa počítače

Pak se ujistěte, že je spuštěná služba SQL Server Browser.

SQL Server Browser Service

Další krok