В продолжение темы работы с СУБД предлагаю вашему вниманию обзор технологий доступа к базам данных.
Обзор подготовил Молчанов Владиславhttp://wladm.narod.ru.
Обзор технологий доступа к базам данных
Взаимодействие приложения с БД может быть организовано различными
способами. Первоначально, как основные, преобладали способы, основанные
на API (Application Programming Interface) библиотек СУБД (позже,
дополнительно, и СOМ объектов), входящих в состав клиентского программного
обеспечения, устанавливаемого на компьютерах пользователей. Как правило,
клиентское программное обеспечение включало в себя и собственную
среду разработки прикладного программного обеспечения. Это
приводило к тому, что замена СУБД требовала значительной переделки
кода приложения. Как результат - в настоящее время главенствующими
становятся универсальные механизмы доступа к данным.
Универсальные механизмы доступа к данным обычно реализованы в виде
библиотек и дополнительных модулей (драйверов или провайдеров).
Библиотеки содержат определенный стандартный набор классов, методов,
параметров, и обеспечивают стандартный интерфейс доступа к данным.
Дополнительные модули реализуют непосредственное обращение к
функциям клиентского API конкретных СУБД. Причем, эти дополнительные
модули, устанавливаются исходя из текущей потребности. Если, Например, приложение
работало с использованием ADO (см. ниже) и, допустим, использовало
визуальный компонент Ado Table - то теперь при необходимости переноса
БД с MySQL на Postgres достаточно будет только установить соответствующий
драйвер и изменить строку Connection в параметрах компонента. Изменение
кода приложения не требуется.
Универсальные методы не лишены недостатков (снижение
производительности, поставка соответствующих драйверов и их настройка
и т. п.), но все это не идет в сравнение с их основным достоинством,
универсальностью. Нельзя забывать и о том, что они значительно
увеличивают производительность труда программиста, так как отпадает необходимость
в изучении специфических интерфейсов и специфических средств разработки.
Среди универсальных методов доступа к данным наиболее распространены
в настоящее время:
ODBC - Open Database Connectivity.
OLE DB - Object Linking and Embedding Database.
ADO - ActiveX Data Objects.
BDE - Borland Database Engine.
ADO.NET - ActiveX Data Objects технологии NET.
ODBC (Microsoft) - механизм взаимодействие с реляционными базами данных.
Для обеспечения доступа к БД необходимы клиентская часть СУБД,
ODBC-драйвер для доступа к этой СУБД (или только драйвер для
некоторых СУБД) и соответствующая настройка ODBC на компьютере
(обычно имя драйвера, пользователя, имя базы, пароль доступа
и указание некоторых параметров драйвера). Драйвер, при выполнении
приложения, загружается в адресное пространство приложения и
используется для доступа к БД. Для каждой СУБД используется
собственный ODBC-драйвер. ODBC API стандартизован. В визуальных
средах разработки теперь достаточно помещения на форму
соответствующего компонента, указания источника данных ODBS,
имени таблицы и связь с базой данных установлена или через
клиентскую часть СУБД или через соответствующий драйвер.
OLE DB (Microsoft) - механизм работы с самыми разнообразными
источниками данных (в отличии от ODBC - где только работа с
реалиционными БД) на базе COM-интерфейса. OLE DB определяет
набор COM-интерфейсов (Component Object Model), включающих различные
сервисы однотипного доступа к различным данным (в том числе и к
нереляционным БД, например, к папкм систем электронной почты
или просто файлам), обеспечивая при этом поддержку работы с
наборами данных и иерархическими наборами записей, подключенными
непостоянно к сети. Для доступа к БД требуется установка OLE DB
провайдера для использованной СУБД (DLL СУБД загружается при
выполнении приложения в его адресное пространство). Кроме того,
фирмой разработан специальный провайдер (Microsoft OLE DB Provider
for ODBC Drivers), который может работать не через API клиентской
части СУБД, а через интерфейс ODBC API.
ADO (Microsoft) - своеобразная надстройка над OLE DB (использует
библиотеки OLE DB) - дополнительный набор библиотек, содержащих
COM-объекты, реализующие интерфейс доступа к данным.
Этот набор библиотек первоначально включал две объектные технологии Microsoft:
Data Access Objects (DAO) и Remote Data Objects (RDO) - два различных механизма доступа к
локальным и удаленным базам данных соответственно.
Как ответ на потребность создания единой технологии, обеспечения единого подхода при работе с БД и единого интерфейса для доступа к локальным и удаленными данным, появилась технология ADO. ADO является более дружественной оболочкой базовой технологии OLE DB и позволяет работать с любыми базами данных.
ADO является более дружественной оболочкой базовой технологии OLE DB и позволяет работать с любыми базами данных.
BDE (Borland) - универсальный механизм доступа к данным,
базирующийся на двух группах библиотек-драйверов (SQL Links - для серверных
СУБД и ODBS Links - для серверных и автономных СУБД). Эти библиотеки
позволили применять стандартный набор функций для доступа к данным
dBase, Access, FoxPro, ODBC-источников, а также большинства серверных СУБД.
BDE поддержан на уровне компонент в визуальных средах разработки фирмы
Borland. Реализация механизма позволяет функциям приложения обращаться
к функциям клиентского API или ODBC API, а также непосредственно
манипулировать файлами данных некоторых СУБД. Для доступа к базе
данных с помощью BDE на компьютере должны быть установлены библиотеки
BDE общего назначения (обычно устанавливаются вместе со средой разработки
и затем включаются в .exe файл), а также BDE-драйвер для данной СУБД.
ADO.NET (Microsoft) - технология работы с базами данных
в three-tier(многоярусной архитектуре), когда соединение с базой данных
устанавливается лишь на период выполнения операций с БД (как правило кратковременных). Ее появление связано с
необходимостью разрешения противоречия между ростом числа обращений
к БД (особенно в БД интернет-серверов) и невозможностью
базы данных поддерживать неограниченное число активных соединений.
ADO.NET призвана решить эти и другие проблемы и вместе с тем
сохранить удобство и простоту программирования. ADO.NET, в ее
современном виде - иерархический набор объектов,
построенный в соответствии с новой идеологией базовых библиотек
классов и смены протоколов COM на .NET.
***
В предыдущем выпуске я разбирал приемы работы с компонентом .Net Framework DataGridView. Я отметил, что
предложенный способ имеет ряд существенных недостатков. За неделю я продвинулся в изучении этого вопроса и хочу вам
предложить более интересное решение.
Итак, помещаем в форму компонент DataGridView и называем его PrjList.
Вызываем окно свойств (Properties) этого элемента и открываем свойство Columns категории Misc.
Появится диалоговое окно Edit Columns. Нажимаем кнопку Add… и заполняем свойства каждой колонки.
Здесь нас интересуют следующие параметры: HeaderText - видимое название колонки, Width - ширина колонки
и самый интересный параметр DataPropertyName - этот параметр определяет из какого столбца выборки будет заполнен
это столбец таблицы DataGridView. Таким образом мы связываем таблицу базы данных и ее отражение в форме.
Ниже предлагаю текст программы.
public partial class ReferencePrj : Form
{
//Соедиение с базой
OracleConnection conn;
//Механизм заполения DataSet
OracleDataAdapter productsAdapter;
// DataSet Кэш данных в оперативной памяти
DataSet productsDataSet;
public ReferencePrj()
{
InitializeComponent();
Connect();
FillList();
}
private void Connect()
{
try
{
//Строка соедиения
string connectionString = "Data Source=" + "<имя базы данных>" +
";User Id=" + "<имя пользователя>" +
";Password=" + "<пароль пользователя>";
//Установление соедиения
conn = new OracleConnection(connectionString);
conn.Open();
}
// обработка исключений
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void FillList()
{
try
{
//создание OracleDataAdapter
productsAdapter = new OracleDataAdapter();
//выборка из базы
productsAdapter.SelectCommand = new OracleCommand("Select PrjType, PrjName, "+
"PrjPriority from tPrjm_refrencePrj", conn);
//cоздание кэша данных
productsDataSet = new DataSet();
//заполнение выбранными данными кэша
productsAdapter.Fill(productsDataSet,"tPrjm_RefrencePrj");
//связывания кэша данных и компанента визуализации.
PrjList.DataSource = productsDataSet;
PrjList.DataMember = "tPrjm_RefrencePrj";
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
Обратите внимание на использование класса DataSet - это универсальное хранилище данных, в него можно прочитать
данные из файла или как сейчас, из базы данных. Интересно, что одновременно DataSet можно загрузить
несколькими наборами данных, в примере выше только один набор - "tPrjm_RefrencePrj", который в последствии и передается
в DataGridView.
Описанный выше способ выборки и отображения данных вполне можно применять на практике.
В следующем выпуске продолжим изучать работу с базой данных в .Net.