ADO.NET kullanarak basit veri uygulaması oluşturma

Not

Veri kümeleri 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. Bunlar ö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ümelerinin çok başarılı bir teknoloji olduğu kanıtlanmış olsa da, yeni .NET uygulamalarının Entity Framework Core kullanmasını öneririz. 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, bağlantı dizesi tanımlama, veri ekleme ve saklı yordamları çalıştırma gibi temel görevleri gerçekleştirirsiniz. Bu konuyu izleyerek, Visual C# veya Visual Basic ve ADO.NET kullanarak basit bir Windows Forms "veri üzerinden formlar" uygulamasının içinden bir veritabanıyla nasıl etkileşim kurabileceğinizi keşfedebilirsiniz. Veri kümeleri, LINQ to SQL ve Entity Framework dahil olmak üzere tüm .NET veri teknolojileri, sonuçta bu makalede gösterilenlere çok benzer adımlar gerçekleştirir.

Bu makalede, veritabanından hızla veri almak için basit bir yol gösterilmektedir. Uygulamanızın verileri önemsiz yollarla değiştirmesi ve veritabanını güncelleştirmesi gerekiyorsa, Entity Framework'i ve temel alınan verilerdeki değişikliklerle kullanıcı arabirimi denetimlerini otomatik olarak eşitlemek için veri bağlamayı kullanmayı düşünmelisiniz.

Önemli

Kodu basit tutmak için üretime hazır özel durum işleme dahil değildir.

Not

Bu öğreticinin tam koduna C# ve Visual Basic'teki Visual Studio belgeleri GitHub deposundan erişilebilir.

Önkoşullar

Uygulamayı oluşturmak için şunları yapmanız gerekir:

  • .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 açın ve değiştirmek istediğiniz Visual Studio sürümünün yanındaki Değiştir (veya Daha Fazla>Değiştir) öğesini seçin.

  • SQL Server Express LocalDB. SQL Server Express LocalDB'niz yoksa, SQL Server indirme sayfasından yükleyebilirsiniz.

Bu konu başlığında, Visual Studio IDE'nin temel işlevleri hakkında bilgi sahibi olduğunuz ve bir Windows Forms uygulaması oluşturabileceğiniz, projeye form ekleyebileceğiniz, formlara düğmeler ve diğer denetimleri yerleştirebileceğiniz, denetimlerin özelliklerini ayarlayabileceğiniz ve basit olayları kodlayabileceğiniz varsayılır. Bu görevlerden memnun değilseniz, bu kılavuza başlamadan önce Visual Basic ile Visual Studio'da Windows Forms uygulaması oluşturma öğreticisini veya C# ile Visual Studio'da Windows Forms uygulaması oluşturma öğreticisini tamamlamanızı öneririz.

Ö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ğlan ions öğesine sağ tıklayın ve Yeni SQL Server Veritabanı Oluştur'u seçin.

  3. Sunucu adı metin kutusuna (localdb)\mssqllocaldb yazın.

  4. Yeni veritabanı adı metin kutusuna Sales yazın ve Tamam'ı seçin.

    Boş Sales veritabanı oluşturulur ve Sunucu Gezgini'ndeki Veri Bağlan ions düğümüne eklenir.

  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 betiğini panonuza kopyalayın.

  7. T-SQL betiğini sorgu düzenleyicisine yapıştırın ve ardından Yürüt düğmesini seçin.

    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 dört basit saklı yordam içerir.

Formları oluşturma ve denetim ekleme

  1. Windows Forms Uygulaması (.NET Framework) şablonunu kullanarak 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. Projenize üç form olacak şekilde iki Windows formu ekleyin ve sonra onlara aşağıdaki adları verin:

    • Gezinti

    • NewCustomer

    • FillOrCancel

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

    Not

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

    Gezinti formu

    Gezinti iletişim kutusu

Gezinti formu denetimleri Properties
Düğme Ad = btnGoToAdd
Düğme Ad = btnGoToFillOrCancel
Düğme Ad = btnExit

NewCustomer formu

Yeni müşteri ekleme ve sipariş verme

NewCustomer formu denetimleri Properties
TextBox Ad = txtCustomerName
TextBox Ad = txtCustomerID

Salt Okunur = Doğru
Düğme Ad = btnCreateAccount
Numericupdown DecimalPlaces = 0

Maksimum = 5000

Ad = numOrderAmount
Datetimepicker Biçim = Kısa

Ad = dtpOrderDate
Düğme Ad = btnPlaceOrder
Düğme Ad = btnAddAnotherAccount
Düğme Ad = btnAddFinish

FillOrCancel formu

siparişleri doldurma veya iptal etme

FillOrCancel formu denetimleri Properties
TextBox Ad = txtOrderID
Düğme Ad = btnFindByOrderID
Datetimepicker Biçim = Kısa

Ad = dtpFillDate
Datagridview Ad = dgvCustomerOrders

Salt Okunur = Doğru

RowHeadersVisible = False
Düğme Ad = btnCancelOrder
Düğme Ad = btnFillOrder
Düğme Ad = btnFinish Güncelleştirmeler

bağlantı dizesi depolama

Uygulamanız veritabanına bir bağlantı açmaya çalıştığında, uygulamanızın bağlantı dizesi erişimi olmalıdır. Dizenin her forma el ile girilmesinden kaçınmak için, dizeyi projenizdeki App.config dosyasında depolayın ve yöntemi uygulamanızdaki herhangi bir formdan çağrıldığında dizeyi döndüren bir yöntem oluşturun.

Sunucu Gezgini'nde Satış verileri bağlantısına sağ tıklayıp Özellikler'i seçerek bağlantı dizesi bulabilirsiniz. Bağlan ionString özelliğini bulun, ardından dizeyi+seçip panoya kopyalamak için Ctrl A, Ctrl+C tuşlarını kullanın.

  1. C# kullanıyorsanız, Çözüm Gezgini'da projenin altındaki Özellikler düğümünü genişletin ve Ayarlar.settings dosyasını açın. Visual Basic kullanıyorsanız, Çözüm Gezgini'de Tüm Dosyaları Göster'e tıklayın, Projem düğümünü genişletin ve Ayarlar.settings dosyasını açın.

  2. Ad sütununa girinconnString.

  3. Tür listesinde (Bağlan ion Dizesi) öğesini seçin.

  4. Kapsam listesinde Uygulama'yı seçin.

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

    Ayarlar.settings dosyasındaki Bağlan ion Dizesinin ekran görüntüsü

Not

Gerçek bir uygulamada, Bağlan ion dizeleri ve yapılandırma dosyalarında açıklandığı gibi bağlantı dizesi güvenli bir şekilde depolamanız gerekir.

Formların kodunu yazma

Bu bölüm, her formun ne yaptığına yönelik kısa genel bakışlar içerir. Ayrıca formdaki bir düğmeye tıklandığında temel alınan mantığı tanımlayan kodu da sağlar.

Uygulamayı çalıştırdığınızda Gezinti formu açılır. Hesap ekle düğmesi NewCustomer formunu açar. Siparişleri doldur veya iptal et düğmesi FillOrCancel formunu açar. Çıkış düğmesi uygulamayı kapatır.

Gezinti formunu başlangıç formu yapma

C# kullanıyorsanız, Çözüm Gezgini Program.cs açın ve satırı şu şekilde değiştirinApplication.Run:Application.Run(new Navigation());

Visual Basic kullanıyorsanız, Çözüm Gezgini Özellikler penceresini açın, Uygulama sekmesini seçin ve başlangıç formu listesinde SimpleDataApp.Navigation öğesini seçin.

Otomatik oluşturulan olay işleyicileri oluşturma

Boş olay işleyicisi yöntemleri oluşturmak için Gezinti formundaki üç düğmeye çift tıklayın. Düğmelere çift tıklanması, Tasarım Aracı kod dosyasına otomatik olarak oluşturulan kodu da ekler ve bu da bir olay oluşturmak için düğmeye tıklamaya olanak tanır.

Not

Tasarımcıda çift tıklama eylemini atlar ve kodu kopyalayıp kod dosyalarınıza yapıştırırsanız, olay işleyicisini doğru yönteme ayarlamayı unutmayın. Bunu Özellikler penceresinde yapabilirsiniz. Olaylar sekmesine geçin (şimşek araç çubuğu düğmesini kullanın) ve Tıklama işleyicisini arayın.

Gezinti formu mantığı için kod ekleme

Gezinti formunun kod sayfasında, aşağıdaki kodda gösterildiği gibi üç düğme tıklamalı 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();
}

Not

Bu öğreticinin kodu C# ve Visual Basic'te kullanılabilir. Bu sayfadaki kod dilini C# ve Visual Basic arasında değiştirmek için her kod örneğinin üst kısmındaki kod dili değiştiricisini kullanın.

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

Otomatik 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ım Aracı kod dosyasına otomatik olarak oluşturulan kodu da ekler ve bu da bir olay oluşturmak için düğmeye tıklamaya olanak tanır.

NewCustomer form mantığı için kod ekleme

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

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

    using System.Data.SqlClient;
    
  2. Aşağıdaki kodda gösterildiği gibi 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;
    }
    
  3. Aşağıdaki kodda gösterildiği gibi dört düğme tıklamalı 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();
    }
    

FillOrCancel formu

FillOrCancel formu, bir sipariş kimliği girip Siparişi Bul düğmesine tıkladığınızda sipariş döndürmek için bir sorgu çalıştırır. Döndürülen satır salt okunur bir veri kılavuzunda görünür. Siparişi İptal 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şi Bul düğmesini yeniden seçerseniz, güncelleştirilmiş satır görüntülenir.

Otomatik 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ım Aracı kod dosyasına otomatik olarak oluşturulan kodu da ekler ve bu da bir olay oluşturmak için düğmeye tıklamaya 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;
    
  2. Aşağıdaki kodda gösterildiği gibi 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;
        }
    }
    
  3. Aşağıdaki kodda gösterildiği gibi dört düğme tıklamalı 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 Sunucu Gezgini'nde Tablolar düğümünü açın, Müşteriler ve Siparişler düğümlerine sağ tıklayın ve Tablo Verilerini Göster'i seçin.