Назад Вперед Зміст

Видалення записів з таблиці бази даних. ADO.NET

Щоб видалити записи з таблиці Книги з вказаним роком видання, можна використати оператор DELETE в SQL. У цьому прикладі ми додамо кнопку для видалення записів, текстове поле для введення року видання та обробник події для виконання видалення записів з бази даних Access.

Розмітка форми (попередньо копіюємо попередній проект з 6_20_2)

    Додайте на форму такі елементи керування:

  1. Button для видалення записів з ім'ям buttonDeleteBooks.

Код форми. Пояснення коду

  1. Ініціалізація компонентів: У конструкторі форми ініціалізуються DataSet та BindingSource.
  2. Завантаження даних: Метод LoadBooks використовується для завантаження даних з таблиці Книги та заповнення DataSet. Потім дані прив'язуються до BindingSource, який пов'язаний з DataGridView.
     using System;
    using System.Data;
    using System.Data.OleDb;
    using System.Windows.Forms;
    
    namespace SUBD
    {
        public partial class Form1 : Form
        {
            // Рядок підключення до бази даних Access
            private string connectionString = @"Provider=Microsoft.ACE.OLEDB.16.0;Data Source=[DataDirectory]\KHMTM.mdb";
            private BindingSource bindingSource;
    
            public Form1()
            {
                InitializeComponent();
                bindingSource = new BindingSource();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // Налаштування прив'язки даних для DataGridView
                dataGridView1.DataSource = bindingSource;
                
                // Завантаження даних при старті форми
                LoadBooks();
            }
    
            private void LoadBooks()
            {
                using (OleDbConnection connection = new OleDbConnection(connectionString))
                {
                    try
                    {
                        connection.Open();
                        
                        // SQL-запит для отримання даних
                        string query = "SELECT * FROM Книги";
                        OleDbDataAdapter adapter = new OleDbDataAdapter(query, connection);
                        
                        // Оновлення даних через BindingSource
                        DataTable dataTable = new DataTable();
                        adapter.Fill(dataTable);
                        bindingSource.DataSource = dataTable;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"Помилка завантаження даних: {ex.Message}", 
                                      "Помилка", 
                                      MessageBoxButtons.OK, 
                                      MessageBoxIcon.Error);
                    }
                }
            }
        }
    }
  3. Обробник події кнопки "Відобразити дані таблиці": Метод buttonLoadData_Click викликається при натисканні кнопки "Відобразити дані таблиці". Він відображає всі записи таблиці в DataGridView.
      private void buttonLoadData_Click(object sender, EventArgs e)
    {
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            try
            {
                // Відкриття з'єднання з базою даних
                connection.Open();
                
                // Створення адаптера даних для виконання SQL-запиту
                OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Книги", connection);
                
                // Створення таблиці даних для зберігання результатів
                DataTable dataTable = new DataTable();
                
                // Заповнення таблиці даними з бази
                adapter.Fill(dataTable);
                
                // Прив'язка даних до DataGridView
                dataGridView1.DataSource = dataTable;
            }
            catch (Exception ex)
            {
                // Обробка помилок з виведенням повідомлення
                MessageBox.Show("Помилка завантаження даних: " + ex.Message, 
                              "Помилка", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
            }
        }
    }
    
    private void buttonExit_Click(object sender, EventArgs e)
    { 
        // Закриття додатку
        Application.Exit(); 
    }
  4. Обробник події кнопки: Метод buttonDeleteBooks_Click викликається при натисканні кнопки "Delete Books". Він перевіряє, що введений рік є допустимим числом, і викликає метод DeleteBooksByYear для видалення записів.
    private void buttonDeleteBooks_Click(object sender, EventArgs e)
    {
        // Перевірка коректності введеного року
        if (!int.TryParse(textBoxYear.Text, out int year))
        {
            MessageBox.Show("Будь ласка, введіть коректний рік.", 
                          "Помилка введення", 
                          MessageBoxButtons.OK, 
                          MessageBoxIcon.Warning);
            return;
        }
    
        // Підтвердження видалення
        DialogResult result = MessageBox.Show($"Ви впевнені, що хочете видалити всі книги {year} року?", 
                                           "Підтвердження видалення", 
                                           MessageBoxButtons.YesNo, 
                                           MessageBoxIcon.Question);
    
        if (result == DialogResult.Yes)
        {
            // Виклик методу видалення книг
            DeleteBooksByYear(year);
        }
    }
    
    private void DeleteBooksByYear(int year)
    {
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            try
            {
                connection.Open();
                
                // SQL-запит для видалення книг за вказаним роком
                string query = "DELETE FROM Книги WHERE [Рік видання] = @Year";
                
                using (OleDbCommand command = new OleDbCommand(query, connection))
                {
                    // Додавання параметра для запобігання SQL-ін'єкціям
                    command.Parameters.AddWithValue("@Year", year);
                    
                    // Виконання запиту та отримання кількості видалених записів
                    int rowsAffected = command.ExecuteNonQuery();
                    
                    // Повідомлення про результат операції
                    MessageBox.Show($"Видалено {rowsAffected} книг {year} року.", 
                                  "Результат операції", 
                                  MessageBoxButtons.OK, 
                                  MessageBoxIcon.Information);
                    
                    // Оновлення відображення даних
                    LoadBooks();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Помилка при видаленні книг: {ex.Message}", 
                              "Помилка бази даних", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
            }
        }
    }
     
  5. Видалення записів: Метод DeleteBooksByYear використовує OleDbCommand для виконання SQL-запиту DELETE FROM, видаляючи записи з таблиці Книги, які відповідають вказаному року видання. Рядок коду int rowsAffected = command.ExecuteNonQuery(); виконує SQL-запит, який змінює дані в базі даних (наприклад, запити UPDATE, INSERT або DELETE), і повертає кількість рядків, які були змінені цим запитом. Кількість видалених рядків відображається у повідомленні, і дані оновлюються методом LoadBooks.
    
     private void DeleteBooksByYear(int year)
    {
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            try
            {
                // Відкриття з'єднання з базою даних
                connection.Open();
                
                // SQL-запит для видалення книг за вказаним роком видання
                string query = "DELETE FROM Книги WHERE [Год издания] = @Year";
                
                using (OleDbCommand command = new OleDbCommand(query, connection))
                {
                    // Додавання параметра для запобігання SQL-ін'єкціям
                    command.Parameters.AddWithValue("@Year", year);
                    
                    // Виконання запиту та отримання кількості видалених записів
                    int rowsAffected = command.ExecuteNonQuery();
                    
                    // Повідомлення про результат операції
                    if (rowsAffected > 0)
                    {
                        MessageBox.Show($"Успішно видалено {rowsAffected} книг.", 
                                      "Результат операції", 
                                      MessageBoxButtons.OK, 
                                      MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show("Не знайдено книг за вказаний рік.", 
                                      "Інформація", 
                                      MessageBoxButtons.OK, 
                                      MessageBoxIcon.Information);
                    }
                }
                
                // Оновлення даних у DataGridView після видалення
                LoadBooks();
            }
            catch (Exception ex)
            {
                // Обробка помилок з виведенням повідомлення
                MessageBox.Show($"Помилка при видаленні книг: {ex.Message}", 
                              "Помилка бази даних", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
            }
        }
    }
     
  6. Після успішного додавання запис оновлюється методом LoadBooks.
    private void LoadBooks()
    {
        // Використання блоку using для автоматичного звільнення ресурсів
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            try
            {
                // Відкриття з'єднання з базою даних
                connection.Open();
                
                // SQL-запит для отримання всіх книг
                string query = "SELECT * FROM Книги";
                
                // Створення адаптера даних
                OleDbDataAdapter adapter = new OleDbDataAdapter(query, connection);
                
                // Очищення попередніх даних у DataSet
                книгиDataSet.Clear();
                
                // Заповнення DataSet новими даними
                adapter.Fill(книгиDataSet, "Книги");
                
                // Прив'язка даних до DataGridView
                dataGridView1.DataSource = книгиDataSet.Tables["Книги"];
            }
            catch (Exception ex)
            {
                // Обробка помилок з інформативним повідомленням
                MessageBox.Show($"Помилка завантаження даних: {ex.Message}", 
                              "Помилка бази даних", 
                              MessageBoxButtons.OK, 
                              MessageBoxIcon.Error);
            }
        }
    }
     

Назад Вперед Зміст