Понятие набора данных как виртуальной базы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Понятие набора данных как виртуальной базы



ДАННЫХ

 

В пространстве имен System.Data определена система классов, которая реализует понятие набора данных. Набор данных (DataSet) представляет собой виртуальную базу данных, которая расположена в оперативной памяти и состоит из набора (коллекции) таблиц (объектов класса DataTable) и связей между ними (объектов класса DataRelation). Каждая таблица имеет набор столбцов (объектов типа DataColumn) и набор строк (объектов типа DataRow). Все таблицы в наборе данных хранятся в виде коллекции Tables. Столбцы в таблице хранятся тоже в виде коллекции под названием Columns, а строки – в виде коллекции под названием Rows. Обращение с таблицами набора данных напоминает работу с базой данных – у таблиц имеется функция Select(), которая задает параметры сортировки и выборки данных. Таким образом, можно моделировать различные запросы.

Набор данных можно создавать программно посредством создания объектов-таблиц и столбцов. Сохранять информацию набора данных можно в формате XML с помощью функции WriteXml(). Также возможна и загрузка информации из XML-файла с помощью функции ReadXml().

 

СВЯЗЬ НАБОРА ДАННЫХ И БАЗЫ ДАННЫХ

 

Набор данных может быть связан с реальными базами данных, реализованными с помощью различных СУБД. Это реализуется с помощью объекта типа OdbcDataAdapter (или OleDbDataAdapter в зависимости от способа соединения с базой данных). Создание SQL-команды осуществляется с помощью адаптера. Кроме того, класс-адаптер имеет специальный метод, который позволяет записать результат выполнения запроса в таблицу набора данных.

Приведем пример заполнения набора данных с помощью адаптера:

// создание подключения к базе данных на основе строки соединения 

// с указанием источника данных ODBC

OdbcConnection con = new OdbcConnection("DSN=proba");

// подключение к источнику данных con.Open();

// формирование адаптера для связи с базой данных

OdbcDataAdapter adapt = new OdbcDataAdapter

("select * from Sessions", con);

// создание набора данных для сохранения результата запроса

DataSet ds = new DataSet();

// заполнение таблицы набора данных (второй параметр) 

// из базы данных через адаптер adapt.Fill(ds,”Sessions”);

// перебор строк из полученной таблицы Sessions набора данных 

// имена столбцов в таблице набора данных будут теми же, 

// что и в исходной таблице базы данных foreach (DataRow dr in ds.Tables[“Sessions”])

Console.WriteLine(“”+dr[“NumGroup”]+” “+dr[“idSubject”]+

                                           ”

”+dr[“Zach_exam”]); con.Close();

 

 

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

 

 

КАК СИНХРОНИЗИРОВАТЬ ИЗМЕНЕНИЯ В НАБОРЕ ДАННЫХ С

БАЗОЙ ДАННЫХ

 

В набор данных можно вносить любые изменения – добавлять новые строки, изменять и удалять существующие строки. Например, добавить строку в таблицу Sessions набора данных можно следующим образом:

// создание строки на основе схемы таблицы Sessions набора данных

DataRow newRow = ds.Tables[“Sessions”].NewRow();

// получилась пустая строка, столбцы которой должны быть заполнены newRow[“NumGroup”]=”903”; newRow[“idSubject”]=5;

...

// добавление созданной строки в таблицу

ds.Tables[“Sessions”].Add(newRow);

 

Однако все изменения происходят с отсоединенным набором данных, т.е. в оперативной памяти компьютера клиентского приложения, но не в базе данных. Чтобы изменения были внесены в исходную базу данных, требуется синхронизировать набор данных и базу с помощью функции класса-адаптера Update(). Однако такая синхронизации возможна только в случае, когда объектадаптер имеет инициализированные свойства-команды SelectCommand, InsertCommand, UpdateCommand, DeleteCommand. По умолчанию при создании адаптера инициализируется только SelectCommand. Возможно задание остальных команд «вручную». 

Для удобства и стандартной инициализации всех свойств-команд адаптера существует специальный класс OdbcCommandBuilder, который генерирует все команды и заполняет соответствующие свойства адаптера. После этого можно проводить синхронизацию изменений с помощью функции Update().

Приведем пример такого программного кода:

// создание подключения к базе данных на основе строки соединения 

// с указанием источника данных ODBC

OdbcConnection con = new OdbcConnection("DSN=proba");

// подключение к источнику данных con.Open();

// формирование адаптера для связи с базой данных

OdbcDataAdapter adapt = new OdbcDataAdapter

                           ("select * from Sessions", con);

// создание команд для адаптера

OdbcCommandBuilder cb = new OdbcCommandBuilder(adapt);

      

// создание набора данных для сохранения результата запроса

DataSet ds = new DataSet();

// заполнение таблицы набора данных (второй параметр) 

// из базы данных через адаптер adapt.Fill(ds,”Sessions”);

...

// любые действия с набором данных – изменение существующих строк, 

// добавление новых, удаление

// синхронизация изменений с базой данных adapt.Update();

// закрывается соединение con.Close();

 



Поделиться:


Последнее изменение этой страницы: 2021-04-12; просмотров: 96; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.136.170 (0.006 с.)