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


Технологія ADO.NET

ADO.NET – це набір класів (фреймворк) для роботи з базами даних та XML-файлами. Абревіатура ADO розшифровується як ActiveX Data Objects.

Ця технологія містить методи та класи для отримання та обробки даних.

Двома основними компонентами архітектури ADO.NET є постачальник даних та автономна модель.

Постачальник даних - це простір імен, який дозволяє підключитися до джерела даних та отримати інформацію, тоді як автономна модель використовується для зберігання цих даних на стороні клієнта.

Постачальники даних у .NET Framework

Як вже згадувалося, постачальник даних у .NET Framework використовується для:

Основні постачальники даних у .NET Framework

Постачальник для SQL Server

Постачальник OLE DB

Постачальник ODBC

Постачальник для Oracle

Важливо

Кожен постачальник містить набір класів для:

Класи в ADO.NET

  1. Connection Class

    Ці класи використовуються для підключення до БД.

  2. Command Class

    Цей клас забезпечує зберігання та виконання SQL-команд. Основні команди:

    1. ExecuteReader: Повертає дані у вигляді рядків
    2. ExecuteNonQuery: Виконує команди, що змінюють дані
    3. ExecuteScalar: Повертає лише одне значення
    4. ExecuteXMLReader: Отримує дані з SQL Server у XML-форматі
  3. DataReader Class

    Використовується для читання даних разом з Command Class

  4. DataAdapter Class

    Містить набір SQL-команд для заповнення DataSet

  5. DataSet Class

    Основний клас ADO.NET, що містить колекцію DataTable

Для початку папишемо консольний додаток.

Даний код на C# демонструє базову роботу з базою даних Microsoft Access через технологію ADO.NET. Програма підключається до бази даних, виконує SQL-запит для отримання даних і виводить результати у консоль.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.OleDb;

namespace Adonet1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Встановлюємо кодування UTF-16 для вводу та виводу
            Console.OutputEncoding = Encoding.Unicode;
            Console.InputEncoding = Encoding.Unicode;

            // 1. Підключаємось до бази даних Access
            string connectionString = @"Provider=Microsoft.ACE.OLEDB.16.0;Data Source=|DataDirectory|\Книги.mdb";
            OleDbConnection connection = new OleDbConnection(connectionString);
            try
            {
                // 2. Відкриваємо підключення
                connection.Open();

                // 3. Створюємо запит для отримання всіх книг
                string query = "SELECT * FROM Книги";
                OleDbCommand command = new OleDbCommand(query, connection);

                // 4. Виконуємо запит та отримуємо дані
                OleDbDataReader reader = command.ExecuteReader();
                Console.WriteLine("Список книг:");

                // 5. Читаємо дані та виводимо назви книг
                while (reader.Read())
                {
                    Console.WriteLine(reader["Название"].ToString());
                }

                // 6. Закриваємо читання та підключення
                reader.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Помилка: " + ex.Message);
            }
            finally
            {
                connection.Close(); // Закриваємо підключення в будь-якому випадку
                Console.ReadKey();
            }
        }
    }
}

Примітка: ADO.NET — це набір класів у .NET Framework, які надають доступ до даних з різних джерел, включаючи реляційні бази даних.

Покрокове пояснення коду

Створення Console Application проекту на C# з використанням ADO.NET для роботи з базою даних Access включає такі кроки:

  1. Крок 1: Створення проекту Console Application
    1. Відкрити Visual Studio
    2. Вибрати "Create a new project"
    3. Обрати шаблон Console Application (.NET Framework)
  2. Крок 2:Підготовка бази даних Access
    1. Сскопіювати базу даних Книги.mdb папку bin/debug свого проекту

  3. Крок 3: Додавання посилання на бібліотеку Access
    1. У Solution Explorer клікнути правою кнопкою на References
    2. Вибрати Microsoft Access Object Library

    3. Вибрати Microsoft Access Database Engine Object Library


      Якщо виникає помилка "Постачальник 'Microsoft.ACE.OLEDB.12.0' не зареєстрований"(коли на комп'ютері відсутній необхідний драйвер)

      Вирішення:

      1. Встановити Microsoft Access Database Engine
        1. Завантажити з офіційного сайту Microsoft
        2. Обрати потрібну версію (32-бітну або 64-бітну)
        3. Запустити встановлення
      2. Перевірити конфігурацію проекту
        1. Відкрити властивості проекту
        2. На вкладці Build(Сборка) вибрати платформу (x86 або x64)
      3. Змінити рядок підключення


  4. Крок 3: Написання коду для підключення
    1. Відкрити код (class Program.cs)
    2. Підключення необхідних просторів імен
      
      using System.Data.OleDb;    // Для роботи з базами даних через OLEDBДодати у проект using System.Data.OleDb;
      1. Далі пишемо код:
        1

        Встановлення кодування UTF-16

        Перш за все, код встановлює кодування UTF-16 для консолі, щоб правильно відображати кириличні символи:

        //Устанавливаем кодировку UTF-16 для ввода и вывода
        Console.OutputEncoding = Encoding.Unicode;
        Console.InputEncoding = Encoding.Unicode;
      2. 2

        Підключення до бази даних Access

        Створюється рядок підключення, який містить інформацію про провайдера та шлях до файлу бази даних:

        // 1. Подключаемся к базе данных Access
        string connectionString = @"Provider=Microsoft.ACE.OLEDB.16.0;Data Source=|DataDirectory|\Книги.mdb";
        OleDbConnection connection = new OleDbConnection(connectionString);

        Увага: Для роботи з форматом .mdb через провайдер Microsoft.ACE.OLEDB.16.0 необхідно мати встановлений Microsoft Access Database Engine.

      3. 3

        Відкриття підключення та обробка винятків

        Код використовує блок try-catch-finally для безпечного відкриття підключення та обробки можливих помилок:

        try
        {
            // 2. Открываем подключение
            connection.Open();

            // 3. Пишем запрос для получения всех книг
            string query = "SELECT * FROM Книги";
            OleDbCommand command = new OleDbCommand(query, connection);
        }
      4. 4

        Виконання SQL-запиту та отримання результатів

        Створюється об'єкт OleDbCommand для виконання SQL-запиту, а потім OleDbDataReader для читання результатів:

        // 4. Выполняем запрос и получаем данные
        OleDbDataReader reader = command.ExecuteReader();
        Console.WriteLine("Список книг:");

        // 5. Читаем данные и выводим названия книг
        while (reader.Read())
        {
            Console.WriteLine(reader["Название"].ToString());
        }
      5. 5

        Закриття ресурсів

        Після завершення роботи з даними необхідно закрити всі відкриті ресурси:

        // 6. Закрываем чтение и подключение
        reader.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Ошибка: " + ex.Message);
        }
        finally
        {
            connection.Close(); // Закрываем подключение в любом случае
            Console.ReadKey();
        }
  • Результат:

  • Створення Windows Form Application проекту на C# з використанням ADO.NET для роботи з базою даних Access включає такі кроки:

    1. Крок 1:Створення проекту Windows Forms
      1. Відкрити Visual Studio
      2. Вибрати "Create a new project"
      3. Обрати шаблон Windows Forms App (.NET Framework)

    2. Крок 2:Підготовка бази даних Access
      1. Сскопіювати базу даних Книги.mdb папку bin/debug свого проекту

    3. Крок 3: Додавання посилання на бібліотеку Access
      1. У Solution Explorer клікнути правою кнопкою на References
      2. Вибрати Microsoft Access Database Engine Object Library
    4. Крок 4: Створення інтерфейсу
      1. Додати елементи керування (DataGridView, Button)
      2. Основні невізуальні компоненти ADO.NET:

        1. OleDbConnection: Підключення до БД
        2. OleDbCommand: Виконання SQL-команд
        3. OleDbDataAdapter: Міст між БД та DataSet
        4. DataSet: Структура даних у пам'яті
        5. BindingSource: Керування прив'язкою даних
    5. Form1.Designer.cs

      namespace SUBD
      {
          partial class Form1
          {
              /// 
              /// Обязательная переменная конструктора.
              /// 
              private System.ComponentModel.IContainer components = null;
      
              /// 
              /// Освободить все используемые ресурсы.
              /// 
              /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
              protected override void Dispose(bool disposing)
              {
                  if (disposing && (components != null))
                  {
                      components.Dispose();
                  }
                  base.Dispose(disposing);
              }
      
              #region Код, автоматически созданный конструктором форм Windows
      
              /// 
              /// Требуемый метод для поддержки конструктора — не изменяйте 
              /// содержимое этого метода с помощью редактора кода.
              /// 
              private void InitializeComponent()
              {
                  this.components = new System.ComponentModel.Container();
                  this.dataGridView1 = new System.Windows.Forms.DataGridView();
                  this.кодкнигиDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
                  this.авторDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
                  this.названиеDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
                  this.издательствоDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
                  this.серияDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
                  this.годизданияDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
                  this.ценаDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
                  this.книгиBindingSource = new System.Windows.Forms.BindingSource(this.components);
                  this.книгиDataSetBindingSource = new System.Windows.Forms.BindingSource(this.components);
                  this.книгиDataSet = new SUBD.КнигиDataSet();
                  this.книгиTableAdapter = new SUBD.КнигиDataSetTableAdapters.КнигиTableAdapter();
                  this.buttonLoadData = new System.Windows.Forms.Button();
                  this.button1 = new System.Windows.Forms.Button();
                  ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
                  ((System.ComponentModel.ISupportInitialize)(this.книгиBindingSource)).BeginInit();
                  ((System.ComponentModel.ISupportInitialize)(this.книгиDataSetBindingSource)).BeginInit();
                  ((System.ComponentModel.ISupportInitialize)(this.книгиDataSet)).BeginInit();
                  this.SuspendLayout();
                  // 
                  // dataGridView1
                  // 
                  this.dataGridView1.AutoGenerateColumns = false;
                  this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
                  this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                  this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
                  this.кодкнигиDataGridViewTextBoxColumn,
                  this.авторDataGridViewTextBoxColumn,
                  this.названиеDataGridViewTextBoxColumn,
                  this.издательствоDataGridViewTextBoxColumn,
                  this.серияDataGridViewTextBoxColumn,
                  this.годизданияDataGridViewTextBoxColumn,
                  this.ценаDataGridViewTextBoxColumn});
                  this.dataGridView1.DataSource = this.книгиBindingSource;
                  this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Top;
                  this.dataGridView1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
                  this.dataGridView1.Location = new System.Drawing.Point(0, 0);
                  this.dataGridView1.Name = "dataGridView1";
                  this.dataGridView1.RowHeadersWidth = 62;
                  this.dataGridView1.RowTemplate.Height = 28;
                  this.dataGridView1.Size = new System.Drawing.Size(1132, 457);
                  this.dataGridView1.TabIndex = 0;
                  // 
                  // кодкнигиDataGridViewTextBoxColumn
                  // 
                  this.кодкнигиDataGridViewTextBoxColumn.DataPropertyName = "Код_книги";
                  this.кодкнигиDataGridViewTextBoxColumn.HeaderText = "Код_книги";
                  this.кодкнигиDataGridViewTextBoxColumn.MinimumWidth = 8;
                  this.кодкнигиDataGridViewTextBoxColumn.Name = "кодкнигиDataGridViewTextBoxColumn";
                  this.кодкнигиDataGridViewTextBoxColumn.Width = 150;
                  // 
                  // авторDataGridViewTextBoxColumn
                  // 
                  this.авторDataGridViewTextBoxColumn.DataPropertyName = "Автор";
                  this.авторDataGridViewTextBoxColumn.HeaderText = "Автор";
                  this.авторDataGridViewTextBoxColumn.MinimumWidth = 8;
                  this.авторDataGridViewTextBoxColumn.Name = "авторDataGridViewTextBoxColumn";
                  this.авторDataGridViewTextBoxColumn.Width = 150;
                  // 
                  // названиеDataGridViewTextBoxColumn
                  // 
                  this.названиеDataGridViewTextBoxColumn.DataPropertyName = "Название";
                  this.названиеDataGridViewTextBoxColumn.HeaderText = "Название";
                  this.названиеDataGridViewTextBoxColumn.MinimumWidth = 8;
                  this.названиеDataGridViewTextBoxColumn.Name = "названиеDataGridViewTextBoxColumn";
                  this.названиеDataGridViewTextBoxColumn.Width = 150;
                  // 
                  // издательствоDataGridViewTextBoxColumn
                  // 
                  this.издательствоDataGridViewTextBoxColumn.DataPropertyName = "Издательство";
                  this.издательствоDataGridViewTextBoxColumn.HeaderText = "Издательство";
                  this.издательствоDataGridViewTextBoxColumn.MinimumWidth = 8;
                  this.издательствоDataGridViewTextBoxColumn.Name = "издательствоDataGridViewTextBoxColumn";
                  this.издательствоDataGridViewTextBoxColumn.Width = 150;
                  // 
                  // серияDataGridViewTextBoxColumn
                  // 
                  this.серияDataGridViewTextBoxColumn.DataPropertyName = "Серия";
                  this.серияDataGridViewTextBoxColumn.HeaderText = "Серия";
                  this.серияDataGridViewTextBoxColumn.MinimumWidth = 8;
                  this.серияDataGridViewTextBoxColumn.Name = "серияDataGridViewTextBoxColumn";
                  this.серияDataGridViewTextBoxColumn.Width = 150;
                  // 
                  // годизданияDataGridViewTextBoxColumn
                  // 
                  this.годизданияDataGridViewTextBoxColumn.DataPropertyName = "Год_издания";
                  this.годизданияDataGridViewTextBoxColumn.HeaderText = "Год_издания";
                  this.годизданияDataGridViewTextBoxColumn.MinimumWidth = 8;
                  this.годизданияDataGridViewTextBoxColumn.Name = "годизданияDataGridViewTextBoxColumn";
                  this.годизданияDataGridViewTextBoxColumn.Width = 150;
                  // 
                  // ценаDataGridViewTextBoxColumn
                  // 
                  this.ценаDataGridViewTextBoxColumn.DataPropertyName = "Цена";
                  this.ценаDataGridViewTextBoxColumn.HeaderText = "Цена";
                  this.ценаDataGridViewTextBoxColumn.MinimumWidth = 8;
                  this.ценаDataGridViewTextBoxColumn.Name = "ценаDataGridViewTextBoxColumn";
                  this.ценаDataGridViewTextBoxColumn.Width = 150;
                  // 
                  // книгиBindingSource
                  // 
                  this.книгиBindingSource.DataMember = "Книги";
                  this.книгиBindingSource.DataSource = this.книгиDataSetBindingSource;
                  // 
                  // книгиDataSetBindingSource
                  // 
                  this.книгиDataSetBindingSource.DataSource = this.книгиDataSet;
                  this.книгиDataSetBindingSource.Position = 0;
                  // 
                  // книгиDataSet
                  // 
                  this.книгиDataSet.DataSetName = "КнигиDataSet";
                  this.книгиDataSet.Namespace = "http://tempuri.org/КнигиDataSet.xsd";
                  this.книгиDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
                  // 
                  // книгиTableAdapter
                  // 
                  this.книгиTableAdapter.ClearBeforeFill = true;
                  // 
                  // buttonLoadData
                  // 
                  this.buttonLoadData.Location = new System.Drawing.Point(690, 468);
                  this.buttonLoadData.Name = "buttonLoadData";
                  this.buttonLoadData.Size = new System.Drawing.Size(197, 60);
                  this.buttonLoadData.TabIndex = 1;
                  this.buttonLoadData.Text = "Отобразить данные таблицы";
                  this.buttonLoadData.UseVisualStyleBackColor = true;
                  this.buttonLoadData.Click += new System.EventHandler(this.buttonLoadData_Click);
                  // 
                  // button1
                  // 
                  this.button1.Location = new System.Drawing.Point(83, 463);
                  this.button1.Name = "button1";
                  this.button1.Size = new System.Drawing.Size(165, 57);
                  this.button1.TabIndex = 2;
                  this.button1.Text = "Закрыть приложение";
                  this.button1.UseVisualStyleBackColor = true;
                  this.button1.Click += new System.EventHandler(this.button1_Click);
                  // 
                  // Form1
                  // 
                  this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
                  this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                  this.ClientSize = new System.Drawing.Size(1132, 540);
                  this.Controls.Add(this.button1);
                  this.Controls.Add(this.buttonLoadData);
                  this.Controls.Add(this.dataGridView1);
                  this.Name = "Form1";
                  this.Text = "Form1";
                  ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
                  ((System.ComponentModel.ISupportInitialize)(this.книгиBindingSource)).EndInit();
                  ((System.ComponentModel.ISupportInitialize)(this.книгиDataSetBindingSource)).EndInit();
                  ((System.ComponentModel.ISupportInitialize)(this.книгиDataSet)).EndInit();
                  this.ResumeLayout(false);
      
              }
      
              #endregion
      
              private System.Windows.Forms.DataGridView dataGridView1;
              private System.Windows.Forms.BindingSource книгиDataSetBindingSource;
              private КнигиDataSet книгиDataSet;
              private System.Windows.Forms.BindingSource книгиBindingSource;
              private КнигиDataSetTableAdapters.КнигиTableAdapter книгиTableAdapter;
              private System.Windows.Forms.DataGridViewTextBoxColumn кодкнигиDataGridViewTextBoxColumn;
              private System.Windows.Forms.DataGridViewTextBoxColumn авторDataGridViewTextBoxColumn;
              private System.Windows.Forms.DataGridViewTextBoxColumn названиеDataGridViewTextBoxColumn;
              private System.Windows.Forms.DataGridViewTextBoxColumn издательствоDataGridViewTextBoxColumn;
              private System.Windows.Forms.DataGridViewTextBoxColumn серияDataGridViewTextBoxColumn;
              private System.Windows.Forms.DataGridViewTextBoxColumn годизданияDataGridViewTextBoxColumn;
              private System.Windows.Forms.DataGridViewTextBoxColumn ценаDataGridViewTextBoxColumn;
              private System.Windows.Forms.Button buttonLoadData;
              private System.Windows.Forms.Button button1;
          }
      }
      
      
    6. Крок 5:Написання коду для підключення
      1. Відкрити код форми (Form1.cs)
      2. Додати необхідні простори імен
    // Підключення необхідних просторів імен
    using System.Data;          // Для роботи з даними
    using System.Data.OleDb;    // Для роботи з базами даних через 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|\Книги.mdb";
    
            // Конструктор форми
            public Form1()
            {
                InitializeComponent(); // Ініціалізація компонентів форми
            }
    
            // Обробник події натискання кнопки завантаження даних
            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);
                    }
                }
            }
    
            // Обробник події натискання кнопки виходу
            private void button1_Click(object sender, EventArgs e)
            {
                Application.Exit(); // Закриття програми
            }
        }
    }

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