Aracılığıyla paylaş


Öğretici: Windows uygulamasında SQL Server veritabanı kullanma

Uygulamanız doğrudan bir SQL Server veritabanına bağlanabilir ve ardından System.Data.SqlClient ad alanında sınıfları kullanarak verileri depolayabilir ve alabilir.

Başlangıç Yapmak

Bu kılavuzda, Windows App SDK kullanan uygulamalarda bunu yapmanızın bir yolunu göstereceğiz. Northwind örnek veritabanını SQL Server örneğine yükler ve sonra bu kod parçacıklarını kullanırsanız, Northwind örnek veritabanındaki ürünleri gösteren temel bir kullanıcı arabirimi elde edersiniz.

Northwind ürünleri

Tip

Northwind ve pubs örnek veritabanlarını oluşturmak için SQL Server Samples GitHub deposundan betikleri de alabilirsiniz.

Bu kılavuzda gösterilen kod parçacıkları bu UWP örnek uygulamasını temel alır.

İlk olarak çözümünüzü ayarlayın

Uygulamanızı doğrudan bir SQL Server veritabanına bağlamak için uygulamanız, Windows App SDK tarafından desteklenen Windows en düşük sürümünü hedefleyebilir. Bu bilgileri projenizin özellikler sayfasında bulabilirsiniz.

  1. bildirim tasarımcısında Windows App SDK projenizin Package.appxmanifest dosyasını açın.
  2. SQL Server kimlik doğrulaması için Windows Kimlik Doğrulaması kullanıyorsanız Capabilities sekmesinde Enterprise Authentication onay kutusunu seçin.

Kurumsal Kimlik Doğrulama Özelliği

Önemli

Seçmeniz gerekenler arasında, Windows Kimlik Doğrulaması kullanıp kullanmadığınıza bakılmaksızın, Internet (İstemci ve Sunucu), Internet (İstemci) ve Özel Ağlar (İstemci ve Sunucu) bulunmaktadır.

SQL Server veritabanında veri ekleme ve alma

Bu bölümde şunları yapacağız:

1️⃣ Bir bağlantı dizesi ekleyin.

2️⃣ Ürün verilerini tutmak için bir sınıf oluşturun.

3️⃣ ürünleri SQL Server veritabanından alın.

4️⃣ Temel bir kullanıcı arabirimi ekleyin.

5️⃣ Kullanıcı Arabirimini Ürünlerle Doldurun.

Uyarı

Bu bölümde veri erişim kodunuzu düzenlemenin bir yolu gösterilmektedir. Yalnızca SQL Server veritabanından veri depolamak ve almak için System.Data.SqlClient'ı nasıl kullanabileceğinize bir örnek sağlamak içindir. Kodunuzu, uygulamanızın tasarımına en uygun şekilde düzenleyebilirsiniz.

Bağlantı dizesi ekleyin

App.xaml.cs dosyasında, App sınıfına çözümünüzün diğer sınıflarına connection string erişim sağlayan bir özellik ekleyin.

connection string, SQL Server Express örneğindeki Northwind veritabanını işaret eder. Bu kod parçacığındaki connection string, SQL Server Express'i yüklerken varsayılan örnek adını SQLEXPRESS tuttuğunuz varsayılır. SQL Server örneğiniz, veritabanınız ve kimlik doğrulama yönteminizle eşleşecek şekilde connection string değişiklik yapabilirsiniz.

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

    ...
}

Önemli

Üretim uygulamalarında, bağlantı bilgileri uygulama yapılandırmasında güvenli bir şekilde depolanmalıdır (bkz. Visual Studio Bağlı Hizmetlerini Kullanarak Azure Uygulama Yapılandırmasını Ekleme). Bağlantı dizeleri ve diğer gizli diziler hiçbir zaman sabit kodlanmamalıdır.

Ürün verilerini barındıracak bir sınıf oluşturma

XAML kullanıcı arabirimimizdeki öznitelikleri bu sınıftaki özelliklere bağlayabilmemiz için INotifyPropertyChanged olayını uygulayan bir sınıf oluşturacağız.

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

SQL Server veritabanından ürün alma

Windows App SDK projesinin MainWindow.xaml.cs dosyasında Northwind örnek veritabanından ürünleri alan bir yöntem oluşturun ve bunları ObservableCollection koleksiyonu olarak Product örnekleri olarak döndürür.

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

Temel kullanıcı arabirimi ekleme

Windows App SDK projesinin MainWindow.xaml dosyasına aşağıdaki XAML'yi ekleyin.

Bu XAML, önceki kod parçacığında döndürdüğünüz her ürünü göstermek için bir ListView oluşturur ve içindeki her satırın ListView özniteliklerini sınıfında tanımladığımız Product özelliklere bağlar.

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

ListView'da ürünleri gösterme

MainWindow.xaml.cs dosyasını açın ve MainWindow sınıfının oluşturucusuna, ListView'un ItemSource özelliğini ObservableCollection örneklerine ayarlayan kodu ekleyin.

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

Projeyi başlatın ve Northwind örnek veritabanındaki ürünlerin kullanıcı arabiriminde göründüğüne bakın.

Northwind ürünleri

SQL Server veritabanınızdaki verilerle yapabileceklerinizi görmek için System.Data.SqlClient ad alanını keşfedin.

Tip

SQL sorgularınızla ilgili yardım için Microsoft Copilot istemeyi deneyin. Copilot SQL sorguları yazmanıza yardımcı olabilir ve kodunuzu geliştirmenin yollarını önerebilir.

Veritabanınıza bağlanırken sorun mu yaşıyorsunuz?

Çoğu durumda, SQL Server yapılandırmasının bazı yönlerinin değiştirilmesi gerekir. Veritabanınıza Windows Forms veya WPF uygulaması gibi başka bir masaüstü uygulamasından bağlanabiliyorsanız, SQL Server için TCP/IP'yi etkinleştirdiğinizden emin olun. Bunu Bilgisayar Yönetimi konsolunda yapabilirsiniz. (Daha fazla bilgi için bkz. Windows Araçları/Yönetim Araçları.)

Bilgisayar Yönetimi

Ardından, SQL Server Browser hizmetinizin çalıştığından emin olun.

SQL Server Tarayıcı Hizmeti

Sonraki adım