Научная статья на тему 'Работа с базами данных на C# на примере Microsoft Access'

Работа с базами данных на C# на примере Microsoft Access Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
809
138
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БАЗЫ ДАННЫХ / ПРОГРАММИРОВАНИЕ / АВТОНОМНЫЙ УРОВЕНЬ / C# / .NET / ADO.NET / SQL / OLE DB / DATASET / DATABASE / PROGRAMMING / STANDALONE LEVEL / C #

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Кевбрин Владислав Андреевич, Волков Виталий Александрович, Трунин Дмитрий Сергеевич

В данной статье рассмотрены основные особенности работы с базами данных на автономном уровне на языке программирования C#.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

WORK WITH DATABASES ON C # AT EXAMPLE MICROSOFT ACCESS

This article describes the main features of the database on a standalone level on the C # programming language.

Текст научной работы на тему «Работа с базами данных на C# на примере Microsoft Access»

ЭЛЕКТРОННЫЙ НАУЧНЫЙ ЖУРНАЛ «APRIORI. ^РИЯ: ЕСТЕСТВЕННЫЕ И ТЕХНИЧЕСКИЕ НАУКИ»

№ 3 2016

УДК 004

РАБОТА С БАЗАМИ ДАННЫХ НА C# НА ПРИМЕРЕ MICROSOFT ACCESS

Кевбрин Владислав Андреевич

студент

Волков Виталий Александрович студент Трунин Дмитрий Сергеевич

студент

Мордовский государственный университет им. Н.П. Огарева, Саранск

Аннотация. В данной статье рассмотрены основные особенности работы с базами данных на автономном уровне на языке программирования C#.

Ключевые слова: базы данных; программирование; автономный уровень; C#; .NET; ADO.NET; SQL; OLE DB; DataSet.

WORK WITH DATABASES ON C # AT EXAMPLE MICROSOFT ACCESS

Kevbrin Vladislaw Andreevich student Trunin Dmitry Sergeevich

student

Volkov Vitaly Alexandrovich

student

Ogarev Mordovian State University, Saransk

Abstract. This article describes the main features of the database on a standalone level on the C # programming language.

Key words: database; programming; standalone level; C #; .NET; ADO.NET; SQL; OLE DB; DataSet.

Пространство имен известное как ADO.NET позволяет нам взаимодействовать с локальными и удаленными реляционными базами данных. Способов взаимодействия платформы .NET с базами данных довольно много. В этой статье мы рассмотрим особенности работы на автономном уровне подключения.

С точки зрения программиста, основной сборкой будет являться System.Data.dll. В процессе работы будем использовать следующие библиотеки входящие в данную сборку: System.Data.OleDb, Sys-tem.Data.SqlClient, System.Data.SqlServerCe.

Автономный уровень позволяет нам смоделировать в памяти данные из базы данных - в вызывающем уровне с помощью многочисленных членов пространства имен System.Data, в основном это будут:

- DataSet - контейнер для любого количества объектов DataTable;

- DataTable - класс, представляет одну таблицу с данными в памяти, содержит коллекцию DataRow и DataColumn;

- DataRow - класс, представляет строку данных в DataTable;

- DataColumn - класс, представляет столбец данных в DataTable;

- DataView - класс, настраиваемой представление DataTable для сортировки, фильтрации, поиска, изменения и навигации.

- DataRelation - класс, представляет отношении «родительский/дочерний объект» между двумя объектами DataTable. Автономный аспект ADO.NET можно использовать и без подключения к базе данных, но чаще всего заполненные объекты DataSet получают с помощью адаптера данных конкретного поставщика данных. Объекты адаптеров выполняют связующую роль между клиентским уровнем и реляционной базой данных. С их помощью можно получить объекты DataSet, поработать с их содержимым и отправить измененные строки обратно для дальнейшей обработки.

Автономные типы позволяют эмулировать реляционные данные с помощью модели объектов, находящихся в памяти. Кроме этого,

System.Data позволяет воспроизвести следующие важные части базы данных:

- Отношения между таблицами;

- Ограничения столбцов;

- Первичные ключи;

- Другие примитивы.

Все это можно делать не осуществляя подключения к СУБД. Обычно используется особый объект - адаптер данных, расширяющий абстрактный тип Db Data Adapter, который поставляет и обновляет данные. В отличие от подключенного уровня, данные, полученные через адаптер, не обрабатываются с помощью объектов чтения данных. Он пересылает данные между вызывающим процессом и источником данных с помощью DataSet. Объект адаптера данных автоматически обслуживает подключение к СУБД, причем данное подключение длится минимальное количество времени. Как только вызывающий процесс получит объект DataSet, вызывающий уровень полностью отключается от базы данных и остается с локальной копией удаленных данных. Таким образом, DataSet имитирует постоянное подключение клиентов, но в реальности он работает с базой данных в памяти.

Объект DataSet содержит в себе три строго типизированных коллекции:

- DataTableCollection - содержит отдельные объекты DataTable;

- DataRelationCollection - содержит информацию об отношениях между таблицами;

- PropertyCollection - позволяет добавить дополнительную информацию в виде пар имя/значение.

Адаптер данных определяет четыре свойства, которые аналогичны таковым командам из языка SQL [1; 2]:

- SelectCommand;

- InsertCommand;

- UpdateCommand;

- DeleteCommand.

Таким образом, последовательность действий при начальной настройке для работы с базой данных будет следующей:

1. Задание строки подключения, для того чтобы указать адаптеру, с какой базой данных он будет работать.

2. Создать и настроить объект DataSet.

3. Создать объект OleDbDataAdapter, указав в качестве параметров свойство OleDbDataAdapter.SelectCommand и строку подключения [3].

4. Создать и настроить объект для генерации команд, которые позволят согласовать изменения, вносимые в DataSet (экземпляр класса OleDbCommandBuilder).

5. Задать свойства адаптера данных: UpdateCommand, InsertCom-mand, DeleteCommand.

6. Заполнить объект DataSet данными из базы данных (метод OleDbDataAdapter.Fill(), для которого в качестве параметров передаются экземпляр класса DataSet и название таблицы).

Для анализа используется заранее подготовленная база данных, которая предоставляет информацию о заказах на автомобили. Она нормализована по стандарту 3NF [4; 6]. Подробное её описание можно найти в статье[5].

Реализуем необходимые объекты для работы с данной базой данных:

//Задание строки подключения

string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Test.accdb";

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

DataSet cn = new DataSet();

//Создание адаптера данных для таблицы, содержащей информацию о заказанных моделях авто

OleDbDataAdapter dAdaptCar = new OleDbDataAdapter("select * from Car", connStr);

//Создание объекта для генерации команд, которые позволят согласовать изменения, вносимые изменения в объект DataSet

OleDbCommandBuilder caropbuild = new OleDbCommandBuild-er(dAdaptCar);

//Получаем автоматически созданный объект SqlCommand, который требуется для операции вставки в базу данных

dAdaptCar.InsertCommand = caropbuild.GetInsertCommand(); //Получаем автоматически созданный объект SqlCommand, который требуется для операции обновления в базе данных

dAdaptCar.UpdateCommand = caropbuild.GetUpdateCommand(); //Получаем автоматически созданный объект SqlCommand, который требуется для операции удаления из базы данных

dAdaptCar.DeleteCommand = caropbuild.GetDeleteCommand(); //Заполняем объект DataSet dAdaptCar.Fill(cn, "Car");

//Выполняем те же действия для второй таблицы OleDbDataAdapter dAdaptOrder = new OleDbDataAdapter("select * from Orders", connStr);

OleDbCommandBuilder orderopbuild = new OleDbCommandBuild-er(dAdaptOrder);

dAdaptOrder.InsertCommand = orderopbuild.GetInsertCommand(); dAdaptOrder.UpdateCommand = orderopbuild.GetUpdateCommand(); dAdaptOrder.DeleteCommand = orderopbuild.GetDeleteCommand(); dAdaptOrder.Fill(cn, "Orders");

OleDbConnection conn = new OleDbConnection(connStr);

В результате выполнения данного кода создаются два экземпляра адаптера данных (dAdaptCar и dAdaptOrder), соответственно, для двух

таблиц (Car и Orders) из базы данных Test.accdb, созданной посредством Microsoft Access, находящейся в директории, путь к которой указан в строке connStr. Часть строки @"Provider=Microsoft.ACE. OLEDB.12.0;" содержит дополнительные данные по подключению: свойством Provider мы задаем необходимый провайдер для подключения базы данных. После создания адаптеров данных, заполняются их представление в памяти через объект DataSet.

Для работы с базой данных из программы в основном используются коллекции DataRow и DataColumn, доступные из объекта таблицы (экземпляр класса DataTable), а так же команды, инициализированные через свойства адаптера данных. Например, изменении фамилии и имени заказчика:

Console.WriteLine("Чей заказ изменить (номер заказа )?"); //Считываем с консоли индетификатор изменяемого заказа string Id = Console.ReadLine(); Console.WriteLine("Введите фамилию заказчика: "); //Считываем с консоли новую фамилию заказчика string lastnamenew = Console.ReadLine(); Console.WriteLine("Введите имя заказчика: "); //Считываем с консоли новое имя заказчика string namenew = Console.ReadLine();

//Находим нужный заказ в таблице Orders и меняем информацию о фамилии заказчика

cn.Tables["Orders"].Select("OrderId=" + Id).ToArray()[0]["LastName"] = lastnamenew;

//Находим нужный заказ в таблице Orders и меняем информацию о имени заказчика

cn.Tables["Orders"].Select("OrderId=" + Id).ToArray()[0]["Name"] = namenew;

В приведенном примере, с помощью метода Select класса DataTable ищется нужный заказ, за тем данные в полях LastName и Name заменяются на те, что вводятся с клавиатуры в консоль. Аналогичным образом можно проводить и другие операции, например:

Console.WriteLine("Чей заказ удалить (номер заказа)? "); //Считываем с консоли индетификатор удаляемого заказа string Id = Console.ReadLine(); //Ищем нужную запись в таблице Car и удаляем её cn.Tables["Car"].Select("CarId=" + cn.Tables["Orders"].Select("OrderId=" + Id).ToArray()[0]["CarModel"].ToString()).ToArray()[0].Delete(); //Ищем нужную запись в таблице Orders и удаляем её cn.Tables["Orders"].Select("OrderId=" + Id).ToArray()[0].Delete();

В результате выполнения данного кода будет удалена информация о выбранном заказе. Эта операция происходит по средствам двух методов класса DataTable:

- Select() - для поиска нужной записи;

- Delete() - для удаления записи.

Работать с базами данных на автономном уровне на языке программирования C# гораздо сложнее, чем на подключенном, но это компенсируется теми положительными моментами, которыми этот уровень обладает. Для того чтобы правильно работать с базами данных, необходимо знать и понимать основные принципы работы с иерархией классов, берущих свое начало из DataSet, а так же правильно применять методы соответствующие им.

Список использованных источников

1. Аббакумов А.А., Акимов В.Л., Егунова А.И., Лещанкин К.А., Таланов В.М. Базы данных (MS ACCESS, MYSQL). Саранск: Изд-во Средневолжского математического общества, 2011. 112 с.

2. Аббакумов А.А., Егунова А.И., Таланов В. М. Базы данных (MS SQL Server). Учеб. пособие. Саранск: Изд-во СВМО, 2015. 66 c.

3. Эндрю Троелсен Язык программирования C# 5.0 и платформа .NET 4.5. М.: ООО «И.Д. Вильямс», 2013. 1312 с.

4. Таланов В.М., Федосин С.А. Проектирование информационных систем и баз данных. Учеб. пособие. Саранск: Изд-во СВМО, 2013. 72 c.

5. Кевбрин В.А., Кузнецов Д.А. Работа с базами данных на C# на примере Microsoft Access // APRIORI. Серия: Естественные и технические науки. 2015. № 6 [Электронный ресурс]. Режим доступа: http://apriori-journal.ru/seria2/6-2015/Kevbrin-Kuznecov.pdf

6. Волков В.А., Трунин Д.С., Митьков С.А. Анализ особенностей использования систем управления базами данных MS Access, MySQL // APRIORI. Серия: Естественные и технические науки. 2015. № 6 [Электронный ресурс]. Режим доступа: http://apriori-journal.ru/seria2/6-2015/Volkov-Trunin-Mitikov.pdf

i Надоели баннеры? Вы всегда можете отключить рекламу.