Freigeben über


Lernprogramm: Verwenden einer SQL Server-Datenbank in einer Windows-App

Ihre App kann eine direkte Verbindung mit einer SQL Server-Datenbank herstellen und anschließend Daten mithilfe von Klassen im Namespace System.Data.SqlClient speichern und abrufen.

Erste Schritte

In diesem Leitfaden zeigen wir Ihnen eine Möglichkeit, dies in Apps zu tun, die die Windows App SDK verwenden. Wenn Sie die Northwind Beispieldatenbank in Ihrer SQL Server Instanz installieren und diese Codeausschnitte dann verwenden, erhalten Sie eine einfache Benutzeroberfläche, auf der Produkte aus der Northwind-Beispieldatenbank angezeigt werden.

Northwind-Produkte

Tipp

Sie können auch Skripts abrufen, um die Northwind und pubs Beispieldatenbanken aus dem SQL Server Samples GitHub Repository zu erstellen.

Die Codeausschnitte in diesem Leitfaden basieren auf dieser UWP-Beispiel-App.

Richten Sie zuerst Ihre Lösung ein

Um Ihre App direkt mit einer SQL Server-Datenbank zu verbinden, kann Ihre App auf eine beliebige Mindestversion von Windows abzielen, die von Windows App SDK unterstützt wird. Sie finden diese Informationen auf der Eigenschaftenseite Ihres Projekts.

  1. Öffnen Sie die Datei Package.appxmanifest Ihres Windows App SDK Projekts im Manifest-Designer.
  2. Aktivieren Sie auf der Registerkarte Capabilities das Kontrollkästchen Enterprise Authentication wenn Sie Windows Authentifizierung zum Authentifizieren Ihrer SQL Server verwenden.

Funktion „Unternehmensauthentifizierung“

Wichtig

Sie müssen auch Internet (Client & Server), Internet (Client) und Private Networks (Client & Server) auswählen, unabhängig davon, ob Sie die Windows-Authentifizierung verwenden.

Hinzufügen und Abrufen von Daten in einer SQL Server-Datenbank

In diesem Abschnitt führen wir folgende Schritte aus:

1️⃣ Fügen Sie eine connection string hinzu.

2️⃣ Erstellen einer Klasse für Produktdaten.

3️⃣ Abrufen von Produkten aus der datenbank SQL Server.

4️⃣ Hinzufügen einer einfachen Benutzeroberfläche.

5️⃣ Auffüllen der Benutzeroberfläche mit Produkten.

Hinweis

In diesem Abschnitt wird eine mögliche Methode zur Strukturierung deines Datenzugriffscodes veranschaulicht. Es soll nur ein Beispiel dafür bereitgestellt werden, wie Sie System.Data.SqlClient zum Speichern und Abrufen von Daten aus einer SQL Server Datenbank verwenden können. Du kannst deinen Code natürlich auch anders strukturieren, wenn das für das Design deiner App sinnvoller ist.

Hinzufügen eines connection string

Fügen Sie in der Datei App.xaml.cs der Klasse App eine Eigenschaft hinzu, die anderen Klassen in Ihrer Lösung Zugriff auf die connection string gibt.

Unsere connection string verweist auf die Northwind-Datenbank in einer SQL Server Express-Instanz. Bei der connection string in diesem Codeausschnitt wird davon ausgegangen, dass Sie beim Installieren von SQL Server Express den Standardinstanznamen SQLEXPRESS beibehalten haben. Sie können Änderungen an der connection string vornehmen, um Ihrer SQL Server Instanz, Datenbank und Authentifizierungsmethode zu entsprechen.

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

    ...
}

Wichtig

In Produktionsanwendungen sollten Verbindungsinformationen sicher in der App-Konfiguration gespeichert werden (siehe Adding-Azure App Configuration mithilfe von Visual Studio Connected Services). Verbindungszeichenfolgen und andere Geheimnisse sollten niemals hartcodiert werden.

Erstellen einer Klasse für Produktdaten

Wir erstellen eine Klasse, die das INotifyPropertyChanged-Ereignis implementiert, damit wir Attribute auf unserer XAML-Benutzeroberfläche an die Eigenschaften in dieser Klasse binden können.

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

Abrufen von Produkten aus der SQL Server-Datenbank

Erstellen Sie in der Datei MainWindow.xaml.cs des Windows App SDK Projekts eine Methode, die Produkte aus der Northwind-Beispieldatenbank abruft, und gibt sie dann als ObservableCollectionauflistung von ProductInstanzen zurück.

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

Hinzufügen einer einfachen Benutzeroberfläche

Fügen Sie der MainWindow.xamldatei des Windows App SDK Projekts den folgenden XAML-Code hinzu.

Dieser XAML-Code erstellt ein ListView-Element, um die einzelnen Produkte anzuzeigen, die im vorherigen Codeausschnitt zurückgegeben wurden, und er bindet die Attribute jeder Zeile im ListView-Element an die Eigenschaften, die wir in der Product-Klasse definiert haben.

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

Anzeigen von Produkten in der Listenansicht

Öffnen Sie die Datei MainWindow.xaml.cs, und fügen Sie dem Konstruktor der MainWindow-Klasse Code hinzu, um die ItemSource-Eigenschaft des ListView-Elements auf die ObservableCollection-Sammlung von Product-Instanzen festzulegen.

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

Starte das Projekt. Daraufhin werden auf der Benutzeroberfläche Produkte aus der Northwind-Beispieldatenbank angezeigt.

Northwind-Produkte

Erkunden Sie den Namespace System.Data.SqlClient, um zu sehen, welche anderen Aktionen Sie mit Daten in Ihrer SQL Server-Datenbank ausführen können.

Tipp

Bitten Sie Microsoft Copilot um Hilfe zu Ihren SQL-Abfragen. Copilot können Sie beim Schreiben von SQL-Abfragen unterstützen und Möglichkeiten vorschlagen, Ihren Code zu verbessern.

Probleme beim Herstellen der Verbindung mit deiner Datenbank?

In den meisten Fällen müssen einige Aspekte der SQL Server Konfiguration geändert werden. Wenn Sie über einen anderen Desktopanwendungstyp wie eine Windows Forms oder WPF Anwendung eine Verbindung mit Ihrer Datenbank herstellen können, stellen Sie sicher, dass Sie TCP/IP für SQL Server aktiviert haben. Hierzu kannst du die Konsole Computerverwaltung verwenden. (Weitere Informationen finden Sie unter Windows Tools/Verwaltungstools.)

Computerverwaltung

Stellen Sie dann sicher, dass Ihr SQL Server Browserdienst ausgeführt wird.

SQL Server Browserdienst

Nächster Schritt