Додавання запису до таблиці "Книги" з використанням ADO.NET передбачає створення та виконання SQL-команди INSERT. У цьому прикладі ми використовуватимемо OleDbCommand для виконання команди INSERT INTO, щоб додати новий запис до бази даних Access.
Розмітка форми (попередньо копіюємо попередній проект):

DataSet та BindingSource.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();
}buttonLoadData_Click викликається при натисканні кнопки та відображає всі записи таблиці в DataGridView.
private void buttonLoadData_Click(object sender, EventArgs e)
{
// Використання з'єднання з базою даних
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
try
{
// Відкриття з'єднання
connection.Open();
// Створення адаптера даних для вибірки всіх записів з таблиці "Книги"
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);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
// Закриття додатку
Application.Exit();
}buttonAddBook_Click перевіряє коректність заповнення полів та викликає метод AddBook для додавання нового запису.
private void buttonAddBook_Click(object sender, EventArgs e)
{
// Перевірка на валідність введених даних
if (string.IsNullOrWhiteSpace(textBoxTitle.Text) ||
string.IsNullOrWhiteSpace(textBoxAuthor.Text) ||
string.IsNullOrWhiteSpace(textBoxOwner.Text) ||
string.IsNullOrWhiteSpace(textBoxSeriy.Text) ||
!int.TryParse(textBoxYearPublished.Text, out int year) ||
!float.TryParse(textBoxCena.Text, out float cena))
{
MessageBox.Show("Будь ласка, введіть коректні дані про книгу.");
return;
}
// Додавання книги з введеними даними
AddBook(textBoxAuthor.Text, textBoxTitle.Text, textBoxOwner.Text, textBoxSeriy.Text, year, cena);
}AddBook використовує OleDbCommand для виконання SQL-запиту INSERT INTO.
Для роботи з грошовими значеннями в Access використовується тип OleDbType.Currency.
Захист від SQL-ін'єкцій: SQL-ін'єкція - це тип атаки, коли зловмисник може модифікувати SQL-запит через необроблений ввід даних.
Приклад вразливого коду:
string query = "SELECT * FROM Users WHERE Username = '" + username + "' AND Password = '" + password + "'";
Якщо ввести ' OR '1'='1 як ім'я користувача, запит завжди поверне всі записи.
Як запобігти: Використовуйте параметризовані запити. Для OleDbCommand використовуються параметри у форматі @Xxxxx:
private void AddBook(string author, string title, string izdat, string seriy, int year, float cena)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
try
{
connection.Open();
string query =
"INSERT INTO Книги (Автор, Название, Издательство, Серия, Год_издания, Цена) " +
"VALUES (@Author, @Title, @Owner, @Seriy, @YearPublished, @Cena)"; // Виправлено роздільники на коми
using (OleDbCommand command = new OleDbCommand(query, connection))
{
// Додавання параметрів для безпеки від SQL-ін'єкцій
command.Parameters.AddWithValue("@Author", author);
command.Parameters.AddWithValue("@Title", title);
command.Parameters.AddWithValue("@Owner", izdat);
command.Parameters.AddWithValue("@Seriy", seriy);
command.Parameters.AddWithValue("@YearPublished", year);
command.Parameters.AddWithValue("@Cena", cena);
command.ExecuteNonQuery();
}
MessageBox.Show("Книгу успішно додано.");
LoadBooks(); // Оновлення даних у DataGridView після додавання
}
catch (Exception ex)
{
MessageBox.Show("Помилка: " + ex.Message);
}
}
}LoadBooks.
private void LoadBooks()
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
try
{
// Відкриття з'єднання з базою даних
connection.Open();
// SQL-запит для отримання всіх книг
string query = "SELECT * FROM Книги";
// Створення адаптера та заповнення DataSet
OleDbDataAdapter adapter = new OleDbDataAdapter(query, connection);
книгиDataSet.Clear(); // Очищення попередніх даних
adapter.Fill(книгиDataSet, "Книги"); // Заповнення DataSet новими даними
// Встановлення джерела даних для DataGridView
dataGridView1.DataSource = книгиDataSet.Tables["Книги"];
}
catch (Exception ex)
{
// Виведення повідомлення про помилку
MessageBox.Show("Помилка: " + ex.Message, "Помилка завантаження", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}