Spec-Zone.ru › MySQL Connectors 1.0

6.1.3 Работа с разъединёнными данными

Ранее, при использовании MySqlDataReader, соединение с базой данных поддерживалось постоянно, если его явно не закрывали. Также возможно работать таким образом, что соединение устанавливается только при необходимости. Например, в этом режиме можно установить соединение для чтения фрагмента данных, затем данные могут быть изменены приложением по необходимости. Соединение можно повторно установить только тогда, когда приложение запишет данные обратно в базу данных. Это разъединяет рабочие данные от базы данных.

Этот режим работы с данными поддерживается MySQL Connector/NET. Для работы этого метода задействованы несколько компонентов:

  • Набор данных (Data Set). Набор данных — это область, в которой данные загружаются для чтения или изменения. Создаётся объект типа DataSet, который может хранить несколько таблиц данных.

  • Адаптер данных (Data Adapter). Адаптер данных является интерфейсом между набором данных и самой базой данных. Адаптер данных отвечает за эффективное управление соединениями с базой данных, открытие и закрытие их по мере необходимости. Адаптер данных создаётся путём создания объекта класса MySqlDataAdapter. Объект класса MySqlDataAdapter имеет два основных метода: Fill, который считывает данные в набор данных, и Update, который записывает данные из набора данных в базу данных.

  • Построитель команд (Command Builder). Построитель команд — вспомогательный объект. Построитель команд работает совместно с адаптером данных. При создании объекта MySqlDataAdapter ему обычно задаётся исходное оператор SELECT. На основе этого оператора Построитель команд может выработать соответствующие операторы UPDATE, INSERT и DELETE, которые потребуются для обновления базы данных. Для создания Построителя команд создаётся объект класса MySqlCommandBuilder.

В следующих разделах каждое из этих классов описывается более подробно.

Создание объекта DataSet

Объект DataSet можно создать просто, как показано в следующем фрагменте кода:

DataSet dsCountry;
...
dsCountry = new DataSet();

Хотя этот код создаёт объект DataSet, он ещё не заполнен данными. Для этого нужен адаптер данных.

Создание объекта MySqlDataAdapter

Объект MySqlDataAdapter можно создать, как показано в следующем примере:

MySqlDataAdapter daCountry;
...
string sql = "SELECT Code, Name, HeadOfState FROM Country WHERE Continent='North America'";
daCountry = new MySqlDataAdapter (sql, conn);
Примечание

Объекту MySqlDataAdapter передаётся SQL, определяющий данные для работы.

Создание объекта MySqlCommandBuilder

После создания MySqlDataAdapter необходимо сгенерировать дополнительные операторы, необходимые для вставки, обновления и удаления данных. Существует несколько способов сделать это, но в этом учебнике вы увидите, как это можно сделать наиболее просто с помощью MySqlCommandBuilder. Следующий фрагмент кода демонстрирует это:

MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);
Примечание

Объект MySqlDataAdapter передаётся в качестве параметра в построитель команд.

Заполнение набора данных

Для работы с данными из базы данных необходимо загрузить их в набор данных. Это одна из задач объекта MySqlDataAdapter, и выполняется методом Fill. Следующий пример кода иллюстрирует этот момент.

DataSet dsCountry;
...
dsCountry = new DataSet();
...
daCountry.Fill(dsCountry, "Country");

Метод Fill является методом MySqlDataAdapter, и адаптер данных знает, как установить соединение с базой данных и извлечь необходимые данные, а затем заполнить набор данных при вызове метода Fill. Второй параметр "Country" — это таблица в наборе данных, которую нужно обновить.

Обновление набора данных

Теперь данные в наборе данных могут быть изменены приложением по мере необходимости. В какой-то момент изменения данных необходимо будет записать обратно в базу данных. Это достигается методом MySqlDataAdapter, методом Update.

daCountry.Update(dsCountry, "Country");

Опять же, указывается набор данных и таблица в наборе данных для обновления.

Пример работы

Взаимодействие между классами DataSet, MySqlDataAdapter и MySqlCommandBuilder может быть немного запутанным, поэтому их работу, возможно, лучше всего проиллюстрировать рабочим кодом.

В этом примере данные из базы данных world считываются в элемент управления Data Grid View. Здесь данные можно просматривать и изменять, прежде чем нажать кнопку обновления. Кнопка обновления затем активирует код для записи изменений обратно в базу данных. Код использует принципы, описанные ранее. Приложение было создано с использованием Microsoft Visual Studio для размещения и создания элементов управления пользовательского интерфейса, но основной код, использующий ключевые классы, описанные ранее, показан в следующем примере кода и является переносимым.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MySql.Data;
using MySql.Data.MySqlClient;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        MySqlDataAdapter daCountry;
        DataSet dsCountry;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
            MySqlConnection conn = new MySqlConnection(connStr);
            try
            {
                label2.Text = "Connecting to MySQL...";

                string sql = "SELECT Code, Name, HeadOfState FROM Country WHERE Continent='North America'";
                daCountry = new MySqlDataAdapter (sql, conn);
                MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);

                dsCountry = new DataSet();
                daCountry.Fill(dsCountry, "Country");
                dataGridView1.DataSource = dsCountry;
                dataGridView1.DataMember = "Country";
            }
            catch (Exception ex)
            {
                label2.Text = ex.ToString();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            daCountry.Update(dsCountry, "Country");
            label2.Text = "MySQL Database Updated!";
        }

    }
}

На следующей фигуре показано запущенное приложение. Приложение «База данных стран» обновило данные в трёх столбцах: Код, Название и Глава государства.

Рисунок 6.1 Приложение «База данных стран»

Content is described in the surrounding text.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-tutorials-data-adapter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API