Aracılığıyla paylaş


ADO.NET kullanarak temel veri uygulaması oluşturma

Note

Sınıf DataSet ve ilgili sınıflar, uygulamaların veritabanıyla bağlantısı kesilirken uygulamaların bellekteki verilerle çalışmasını sağlayan 2000'lerin başlarındaki eski .NET Framework teknolojileridir. Teknolojiler özellikle kullanıcıların verileri değiştirmesine ve değişiklikleri veritabanında kalıcı hale getirebilmesine olanak tanıyan uygulamalar için kullanışlıdır. Veri kümeleri başarısı kanıtlanmış bir teknoloji olsa da, yeni .NET uygulamaları için önerilen yaklaşım Entity Framework Core kullanmaktır. Entity Framework, tablosal verilerle nesne modelleri olarak çalışmak için daha doğal bir yol sağlar ve daha basit bir programlama arabirimine sahiptir.

Veritabanındaki verileri işleyen bir uygulama oluşturduğunuzda, genellikle bağlantı dizelerini tanımlama, veri ekleme ve saklı yordamları çalıştırma gibi görevleri gerçekleştirirsiniz. Bu makaleyi takip ettikçe, Visual C# veya Visual Basic ve ADO.NET kullanarak veri üzerinden formlar (FOD) Windows Forms uygulamasının içinden veritabanıyla nasıl etkileşim kurabileceğinizi keşfedebilirsiniz. Veri kümeleri, LINQ (Language-Integrated Query) ile SQL ve Entity Framework dahil olmak üzere tüm .NET veri teknolojileri, sonuçta bu makalede gösterilen adımlara benzer adımlar gerçekleştirir.

Bu makalede, bir veritabanından hızla veri alma işlemleri gösterilmektedir. Uygulamanızın verileri önemsiz yollarla değiştirmesi ve veritabanını güncelleştirmesi gerekiyorsa Entity Framework ve veri bağlamayı kullanmayı göz önünde bulundurun. Bunun yapılması, kullanıcı arabirimi denetimlerinizin temel alınan verilerdeki değişikliklerle otomatik olarak eşitlenmesini sağlar.

C# ve Visual Basic için Visual Studio belgeleri GitHub deposuna bakarak bu öğreticinin tam koduna erişebilirsiniz.

Important

Kodu basit tutmak için, üretime hazır bir özel durum işleme sistemi dahil edilmemiştir.

Prerequisites

  • .NET masaüstü geliştirme ve Veri depolama ve işleme iş yüklerinin yüklü olduğu Visual Studio. Bunları yüklemek için Visual Studio Yükleyicisi'ni açın ve değiştirmek istediğiniz Visual Studio sürümünün yanındaki Değiştir'i seçin.

  • SQL Server Express LocalDB. SQL Server Express LocalDB'niz yoksa SQL Server indirme sayfasındanyükleyebilirsiniz.

Bu makalede, Visual Studio IDE'nin temel işlevselliği hakkında bilgi sahibi olduğunuz varsayılır. Ayrıca bir Windows Forms uygulaması oluşturabileceğinizi, projeye form ekleyebileceğinizi, formlara düğmeler ve diğer denetimleri ekleyebileceğinizi, denetim özelliklerini ayarlayabileceğinizi ve basit olayları kodlayabileceğinizi varsayar. Bu görevlere alışamıyorsanız, bu kılavuzu başlatmadan önce C# ile Visual Studio'da Windows Forms uygulaması oluşturma öğreticisini veya Visual Basic ile Visual Studio'da Windows Forms uygulaması oluşturma öğreticisini tamamlayın.

Örnek veritabanını ayarlama

Aşağıdaki adımları izleyerek örnek veritabanını oluşturun:

  1. Visual Studio'da Sunucu Gezgini penceresini açın.

  2. Veri Bağlantıları'nı sağ tıklatın ve Yeni SQL Server Veritabanı Oluştur'u seçin.

  3. Sunucu adı için(localdb)\mssqllocaldb girin.

  4. Yeni veritabanı adı içinSales yazın ve Tamam'ı seçin.

    Visual Studio, Sunucu Gezgini'ndeki Veri Bağlantıları düğümü altında boş bir Sales veritabanı oluşturur.

  5. Satış verileri bağlantısına sağ tıklayın ve Yeni Sorgu'yu seçin.

    Sorgu düzenleyicisi penceresi açılır.

  6. Sales Transact-SQL komut dosyasını panonuza kopyalayın.

  7. T-SQL betiğini sorgu düzenleyicisi penceresine yapıştırın ve ardından Yürüt'e tıklayın.

    Kısa bir süre sonra sorgunun çalışması tamamlanıp veritabanı nesneleri oluşturulur. Veritabanı iki tablo içerir: Müşteri ve Siparişler. Bu tablolar başlangıçta veri içermez, ancak oluşturduğunuz uygulamayı çalıştırdığınızda veri ekleyebilirsiniz. Veritabanı ayrıca beş temel saklı yordam içerir.

Formları oluşturma ve denetim ekleme

  1. Windows Forms Uygulaması (.NET Framework) şablonuyla bir C# veya Visual Basic projesi oluşturun ve simpleDataApp olarak adlandırın.

    Visual Studio projeyi ve Form1 adlı boş bir Windows formu da dahil olmak üzere çeşitli dosyaları oluşturur.

  2. Çözüm Gezgini'nde projenize iki Windows formu ekleyerek toplamda üç form olmasını sağlayın ve onlara aşağıdaki adları verin:

    • Navigation

    • NewCustomer

    • FillOrCancel

  3. Her form için, aşağıdaki çizimlerde gösterilen metin kutularını, düğmeleri ve diğer denetimleri ekleyin. Her denetim için tabloların tanımladığı özellikleri ayarlayın.

    Note

    Grup kutusu ve etiket denetimleri netlik katar, ancak kodda kullanılmaz.

    Gezinti Formu

    Gezinti formu ayrıntılarını gösteren ekran görüntüsü.

    Gezinti formu denetimleri

    Denetim metni Denetim türü Denetim özellikleri
    Hesap ekleme Button Ad = btnGoToAdd
    Siparişi doldurma veya iptal etme Button Ad = btnGoToFillOrCancel
    Exit Button Ad = btnExit

    YeniMüşteri formu

    NewCustomer form ayrıntılarını gösteren ekran görüntüsü.

    NewCustomer formu denetimleri

    Etiket/Denetim metni Denetim türü Denetim özellikleri
    Müşteri adı TextBox Ad = txtCustomerName
    Müşteri Kimliği TextBox İsim = txtCustomerID
    ReadOnly = True
    Hesap oluşturma Button Ad = btnCreateAccount
    Sipariş tutarı NumericUpdown Ad = numOrderAmount
    DecimalPlaces = 0
    Maksimum = 5000
    Sipariş tarihi DateTimePicker Ad = dtpOrderDate
    Biçim = Kısa
    Sipariş ver Button Ad = btnPlaceOrder
    Finish Button Ad = btnAddFinish
    Başka bir hesap ekleme Button Ad = btnAddAnotherAccount

    DoldurVeyaİptalEt formu

    FillOrCancel form ayrıntılarını gösteren ekran görüntüsü.

    FillOrCancel formu denetimleri

    Etiket/Denetim metni Denetim türü Denetim özellikleri
    Sipariş Kimliği TextBox Ad = txtOrderID
    Siparişi bul Button Ad = btnSiparişIDİleBul
    Sipariş dolduruluyorsa... DateTimePicker Ad = dtpFillDate
    Biçim = Kısa
    (None) DataGridView Ad = dgvCustomerOrders
    ReadOnly = True
    RowHeadersVisible = Yanlış
    Siparişi iptal et Button Ad = btnCancelOrder
    Sipariş tamamlama Button Ad = btnFillOrder
    Finish Button Ad = btnGuncellemeleriBitir

Bağlantı dizesini depolama

Uygulamanız veritabanına bir bağlantı açmaya çalıştığında, uygulamanızın bağlantı dizesine erişimi olmalıdır. Dizeyi her forma el ile girme gereğini önlemek için dizeyi projenizdeki App.config dosyasında depolayın. Ardından, uygulamanızdaki herhangi bir formdan yöntem çağrıldığında dizeyi döndüren bir yöntem oluşturun.

Bağlantı dizesini bulmak için:

  1. Sunucu Gezgini'nde Satış verileri bağlantısına sağ tıklayın ve özellikler'i seçin.

  2. Bağlantı Dizesi özelliğini bulun ve dize değerini panoya kopyalayın.

Bağlantı dizesini projenizde depolamak için:

  1. Çözüm Gezgini'nde, proje türünüze bağlı olarak aşağıdaki adımlardan birini yapın:

    • C# projesi için, projenin altındaki Özellikler düğümünü genişletin ve ardından Settings.settings dosyasını açın.

    • Visual Basic projesi için Tüm Dosyaları Göster'i seçin, Projem düğümünü genişletin ve ardından Settings.settings dosyasını açın.

  2. Ad sütununa connString girin.

  3. Tür listesinde (Bağlantı dizesi) öğesini seçin.

  4. Kapsamı listesinde uygulama seçin.

  5. Değer sütununa bağlantı dizenizi girin (dış tırnak işaretleri olmadan) ve değişikliklerinizi kaydedin.

    Settings.settings içindeki Bağlantı Dizesi verilerini gösteren ekran görüntüsü.

Caution

Gerçek bir uygulamada, Bağlantı dizeleri ve yapılandırma dosyalarıaçıklandığı gibi bağlantı dizesini güvenli bir şekilde depolamanız gerekir. En iyi güvenlik için, bağlantı dizesinde parola depolamaya dayanmayan bir kimlik doğrulama yöntemi kullanın. Örneğin, şirket içi SQL Server veritabanı için Windows Kimlik Doğrulaması. Daha fazla bilgi için bkz. Bağlantı dizelerini kaydetme ve düzenleme.

Formların kodunu yazma

Bu bölüm, her formun ne yaptığına yönelik kısa genel bakışlar içerir. Ayrıca, formda bir düğme seçtiğinizde temel alınan mantığı tanımlayan kodu da sağlar.

Uygulamayı çalıştırdığınızda Gezinti formu açılır ve aşağıdaki düğmeleri içerir:

  • Hesap ekleme: NewCustomer formunu açar.

  • Siparişleri doldurma veya iptal etme: FillOrCancel formunu açar.

  • Çıkış: Uygulamayı kapatır.

"Gezinti formunu başlangıç formu yapın"

C# projeleri için:

  1. Çözüm Gezgini'ndeProgram.cs açın.

  2. Satırı şu şekilde Application.Run değiştirin: Application.Run(new Navigation());

Visual Basic projeleri için:

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve Özellikler'i seçin.

  2. Proje Tasarımcısı'nda Uygulama sekmesini ve ardından Başlangıç nesnesi listesinde Gezinti'yi seçin.

Gezinti formu için otomatik olarak oluşturulan olay işleyicileri oluşturma

Boş olay işleyicisi yöntemleri oluşturmak için Gezinti formundaki üç düğmenin her birine çift tıklayın. Bir düğmeye çift tıklanması Tasarımcı kod dosyasına otomatik olarak oluşturulan kod ekler ve bu da düğme seçiminin bir olayı tetiklesine olanak tanır.

Tasarımcıda çift tıklama eylemini kullanmak yerine kodu doğrudan kod dosyalarınıza kopyalayıp yapıştırmaya karar verirseniz, olay işleyicisini doğru yönteme ayarladığınızdan emin olun:

  1. Formun kod dosyasının Özellikler penceresinde şimşek araç çubuğu düğmesini kullanarak Olaylar sekmesine geçin.

  2. Click özelliğini arayın ve değerinin doğru olay işleyici yöntemi olduğunu doğrulayın.

Gezinti formu mantığı için kod ekleme

Gezinti formunun kod sayfasında, aşağıdaki kodda gösterildiği gibi üç düğme seçme olay işleyicisinin yöntem gövdelerini tamamlayın.

/// <summary>
/// Opens the NewCustomer form as a dialog box,
/// which returns focus to the calling form when it is closed. 
/// </summary>
private void btnGoToAdd_Click(object sender, EventArgs e)
{
    Form frm = new NewCustomer();
    frm.Show();
}

/// <summary>
/// Opens the FillorCancel form as a dialog box. 
/// </summary>
private void btnGoToFillOrCancel_Click(object sender, EventArgs e)
{
    Form frm = new FillOrCancel();
    frm.ShowDialog();
}

/// <summary>
/// Closes the application (not just the Navigation form).
/// </summary>
private void btnExit_Click(object sender, EventArgs e)
{
    this.Close();
}

YeniMüşteri formu

Bir müşteri adı girip Hesap oluştur düğmesini seçtiğinizde, NewCustomer formu bir müşteri hesabı oluşturur ve SQL Server yeni müşteri kimliği olarak bir KIMLIK değeri döndürür. Ardından bir tutar ve sipariş tarihi belirtip Sipariş ver düğmesini seçerek yeni hesap için bir sipariş vekleyebilirsiniz .

NewCustomer formu için otomatik olarak oluşturulan olay işleyicileri oluşturma

Dört düğmenin her birine çift tıklayarak NewCustomer formundaki her düğme için boş bir Click olay işleyicisi oluşturun. Düğmelere çift tıklanması, tasarımcı kod dosyasına otomatik olarak üretilen kodu da ekler ve bu sayede bir düğme seçiminin bir olayı tetiklemesine olanak tanır.

NewCustomer form mantığı için kod ekleme

NewCustomer form mantığını tamamlamak için şu adımları izleyin:

  1. Ad alanı System.Data.SqlClient'yi kapsama alın, böylece üyelerinin adlarını tam olarak nitelemeniz gerekmez.

    using System.Data.SqlClient;
    

  1. Sınıfına bazı değişkenler ve yardımcı yöntemler ekleyin.

    // Storage for IDENTITY values returned from database.
    private int parsedCustomerID;
    private int orderID;
    
    /// <summary>
    /// Verifies that the customer name text box is not empty.
    /// </summary>
    private bool IsCustomerNameValid()
    {
        if (txtCustomerName.Text == "")
        {
            MessageBox.Show("Please enter a name.");
            return false;
        }
        else
        {
            return true;
        }
    }
    
    /// <summary>
    /// Verifies that a customer ID and order amount have been provided.
    /// </summary>
    private bool IsOrderDataValid()
    {
        // Verify that CustomerID is present.
        if (txtCustomerID.Text == "")
        {
            MessageBox.Show("Please create customer account before placing order.");
            return false;
        }
        // Verify that Amount isn't 0.
        else if ((numOrderAmount.Value < 1))
        {
            MessageBox.Show("Please specify an order amount.");
            return false;
        }
        else
        {
            // Order can be submitted.
            return true;
        }
    }
    
    /// <summary>
    /// Clears the form data.
    /// </summary>
    private void ClearForm()
    {
        txtCustomerName.Clear();
        txtCustomerID.Clear();
        dtpOrderDate.Value = DateTime.Now;
        numOrderAmount.Value = 0;
        this.parsedCustomerID = 0;
    }
    

  1. Dört düğme seçme olay işleyicisi için yöntem gövdelerini tamamlayın.

    /// <summary>
    /// Creates a new customer by calling the Sales.uspNewCustomer stored procedure.
    /// </summary>
    private void btnCreateAccount_Click(object sender, EventArgs e)
    {
        if (IsCustomerNameValid())
        {
            // Create the connection.
            using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString))
            {
                // Create a SqlCommand, and identify it as a stored procedure.
                using (SqlCommand sqlCommand = new SqlCommand("Sales.uspNewCustomer", connection))
                {
                    sqlCommand.CommandType = CommandType.StoredProcedure;
    
                    // Add input parameter for the stored procedure and specify what to use as its value.
                    sqlCommand.Parameters.Add(new SqlParameter("@CustomerName", SqlDbType.NVarChar, 40));
                    sqlCommand.Parameters["@CustomerName"].Value = txtCustomerName.Text;
    
                    // Add the output parameter.
                    sqlCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int));
                    sqlCommand.Parameters["@CustomerID"].Direction = ParameterDirection.Output;
    
                    try
                    {
                        connection.Open();
    
                        // Run the stored procedure.
                        sqlCommand.ExecuteNonQuery();
    
                        // Customer ID is an IDENTITY value from the database.
                        this.parsedCustomerID = (int)sqlCommand.Parameters["@CustomerID"].Value;
    
                        // Put the Customer ID value into the read-only text box.
                        this.txtCustomerID.Text = Convert.ToString(parsedCustomerID);
                    }
                    catch
                    {
                        MessageBox.Show("Customer ID was not returned. Account could not be created.");
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
        }
    }
    
    /// <summary>
    /// Calls the Sales.uspPlaceNewOrder stored procedure to place an order.
    /// </summary>
    private void btnPlaceOrder_Click(object sender, EventArgs e)
    {
        // Ensure the required input is present.
        if (IsOrderDataValid())
        {
            // Create the connection.
            using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString))
            {
                // Create SqlCommand and identify it as a stored procedure.
                using (SqlCommand sqlCommand = new SqlCommand("Sales.uspPlaceNewOrder", connection))
                {
                    sqlCommand.CommandType = CommandType.StoredProcedure;
    
                    // Add the @CustomerID input parameter, which was obtained from uspNewCustomer.
                    sqlCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int));
                    sqlCommand.Parameters["@CustomerID"].Value = this.parsedCustomerID;
    
                    // Add the @OrderDate input parameter.
                    sqlCommand.Parameters.Add(new SqlParameter("@OrderDate", SqlDbType.DateTime, 8));
                    sqlCommand.Parameters["@OrderDate"].Value = dtpOrderDate.Value;
    
                    // Add the @Amount order amount input parameter.
                    sqlCommand.Parameters.Add(new SqlParameter("@Amount", SqlDbType.Int));
                    sqlCommand.Parameters["@Amount"].Value = numOrderAmount.Value;
    
                    // Add the @Status order status input parameter.
                    // For a new order, the status is always O (open).
                    sqlCommand.Parameters.Add(new SqlParameter("@Status", SqlDbType.Char, 1));
                    sqlCommand.Parameters["@Status"].Value = "O";
    
                    // Add the return value for the stored procedure, which is  the order ID.
                    sqlCommand.Parameters.Add(new SqlParameter("@RC", SqlDbType.Int));
                    sqlCommand.Parameters["@RC"].Direction = ParameterDirection.ReturnValue;
    
                    try
                    {
                        //Open connection.
                        connection.Open();
    
                        // Run the stored procedure.
                        sqlCommand.ExecuteNonQuery();
    
                        // Display the order number.
                        this.orderID = (int)sqlCommand.Parameters["@RC"].Value;
                        MessageBox.Show("Order number " + this.orderID + " has been submitted.");
                    }
                    catch
                    {
                        MessageBox.Show("Order could not be placed.");
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
        }
    }
    
    /// <summary>
    /// Clears the form data so another new account can be created.
    /// </summary>
    private void btnAddAnotherAccount_Click(object sender, EventArgs e)
    {
        this.ClearForm();
    }
    
    /// <summary>
    /// Closes the form/dialog box.
    /// </summary>
    private void btnAddFinish_Click(object sender, EventArgs e)
    {
        this.Close();
    }
    

DoldurVeyaİptalEt formu

FillOrCancel formu, sipariş kimliği girdiğinizde sipariş döndürmek için bir sorgu çalıştırır ve ardından Sipariş bul düğmesini seçin. Döndürülen satır salt okunur bir veri tablosunda görünür. Siparişi iptal et düğmesini seçerseniz siparişi iptal edildi (X) olarak işaretleyebilir veya Siparişi doldur düğmesini seçerseniz siparişi doldurulmuş (F) olarak işaretleyebilirsiniz. Sipariş bul düğmesini yeniden seçerseniz, güncelleştirilmiş satır görüntülenir.

FillOrCancel formu için otomatik olarak oluşturulan olay işleyicileri oluşturma

FillOrCancel formundaki dört düğme için, düğmelere çift tıklayarak boş Click olay işleyicileri oluşturun. Düğmelere çift tıklanması, tasarımcı kod dosyasına otomatik olarak üretilen kodu da ekler ve bu sayede bir düğme seçiminin bir olayı tetiklemesine olanak tanır.

FillOrCancel form mantığı için kod ekleme

FillOrCancel form mantığını tamamlamak için aşağıdaki adımları izleyin.

  1. Üyelerin adlarını tam olarak nitelemeniz gerekmeyecek şekilde aşağıdaki iki ad alanını kapsama alın.

    using System.Data.SqlClient;
    using System.Text.RegularExpressions;
    

  1. sınıfına bir değişken ve yardımcı yöntemi ekleyin.

    // Storage for the order ID value.
    private int parsedOrderID;
    
    /// <summary>
    /// Verifies that an order ID is present and contains valid characters.
    /// </summary>
    private bool IsOrderIDValid()
    {
        // Check for input in the Order ID text box.
        if (txtOrderID.Text == "")
        {
            MessageBox.Show("Please specify the Order ID.");
            return false;
        }
    
        // Check for characters other than integers.
        else if (Regex.IsMatch(txtOrderID.Text, @"^\D*$"))
        {
            // Show message and clear input.
            MessageBox.Show("Customer ID must contain only numbers.");
            txtOrderID.Clear();
            return false;
        }
        else
        {
            // Convert the text in the text box to an integer to send to the database.
            parsedOrderID = Int32.Parse(txtOrderID.Text);
            return true;
        }
    }
    

  1. Dört düğme seçme olay işleyicisi için yöntem gövdelerini tamamlayın.

    /// <summary>
    /// Executes a t-SQL SELECT statement to obtain order data for a specified
    /// order ID, then displays it in the DataGridView on the form.
    /// </summary>
    private void btnFindByOrderID_Click(object sender, EventArgs e)
    {
        if (IsOrderIDValid())
        {
            using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString))
            {
                // Define a t-SQL query string that has a parameter for orderID.
                const string sql = "SELECT * FROM Sales.Orders WHERE orderID = @orderID";
    
                // Create a SqlCommand object.
                using (SqlCommand sqlCommand = new SqlCommand(sql, connection))
                {
                    // Define the @orderID parameter and set its value.
                    sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int));
                    sqlCommand.Parameters["@orderID"].Value = parsedOrderID;
    
                    try
                    {
                        connection.Open();
    
                        // Run the query by calling ExecuteReader().
                        using (SqlDataReader dataReader = sqlCommand.ExecuteReader())
                        {
                            // Create a data table to hold the retrieved data.
                            DataTable dataTable = new DataTable();
    
                            // Load the data from SqlDataReader into the data table.
                            dataTable.Load(dataReader);
    
                            // Display the data from the data table in the data grid view.
                            this.dgvCustomerOrders.DataSource = dataTable;
    
                            // Close the SqlDataReader.
                            dataReader.Close();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("The requested order could not be loaded into the form.");
                    }
                    finally
                    {
                        // Close the connection.
                        connection.Close();
                    }
                }
            }
        }
    }
    
    /// <summary>
    /// Cancels an order by calling the Sales.uspCancelOrder
    /// stored procedure on the database.
    /// </summary>
    private void btnCancelOrder_Click(object sender, EventArgs e)
    {
        if (IsOrderIDValid())
        {
            // Create the connection.
            using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString))
            {
                // Create the SqlCommand object and identify it as a stored procedure.
                using (SqlCommand sqlCommand = new SqlCommand("Sales.uspCancelOrder", connection))
                {
                    sqlCommand.CommandType = CommandType.StoredProcedure;
    
                    // Add the order ID input parameter for the stored procedure.
                    sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int));
                    sqlCommand.Parameters["@orderID"].Value = parsedOrderID;
    
                    try
                    {
                        // Open the connection.
                        connection.Open();
    
                        // Run the command to execute the stored procedure.
                        sqlCommand.ExecuteNonQuery();
                    }
                    catch
                    {
                        MessageBox.Show("The cancel operation was not completed.");
                    }
                    finally
                    {
                        // Close connection.
                        connection.Close();
                    }
                }
            }
        }
    }
    
    /// <summary>
    /// Fills an order by calling the Sales.uspFillOrder stored
    /// procedure on the database.
    /// </summary>
    private void btnFillOrder_Click(object sender, EventArgs e)
    {
        if (IsOrderIDValid())
        {
            // Create the connection.
            using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.connString))
            {
                // Create command and identify it as a stored procedure.
                using (SqlCommand sqlCommand = new SqlCommand("Sales.uspFillOrder", connection))
                {
                    sqlCommand.CommandType = CommandType.StoredProcedure;
    
                    // Add the order ID input parameter for the stored procedure.
                    sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int));
                    sqlCommand.Parameters["@orderID"].Value = parsedOrderID;
    
                    // Add the filled date input parameter for the stored procedure.
                    sqlCommand.Parameters.Add(new SqlParameter("@FilledDate", SqlDbType.DateTime, 8));
                    sqlCommand.Parameters["@FilledDate"].Value = dtpFillDate.Value;
    
                    try
                    {
                        connection.Open();
    
                        // Execute the stored procedure.
                        sqlCommand.ExecuteNonQuery();
                    }
                    catch
                    {
                        MessageBox.Show("The fill operation was not completed.");
                    }
                    finally
                    {
                        // Close the connection.
                        connection.Close();
                    }
                }
            }
        }
    }
    
    /// <summary>
    /// Closes the form.
    /// </summary>
    private void btnFinishUpdates_Click(object sender, EventArgs e)
    {
        this.Close();
    }
    

Uygulamanızı test edin

Uygulamayı çalıştırın ve her şeyin beklendiği gibi çalıştığını doğrulamak için birkaç müşteri ve sipariş oluşturmayı deneyin.

Veritabanının değişikliklerinizle güncelleştirildiğini doğrulamak için:

  1. Sunucu Gezgini'nde Tablolar düğümünü açın.

  2. Müşteriler ve Siparişler düğümlerine sağ tıklayın ve Tablo Verilerini Göster'i seçin.