Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Благодарности 16 страница






Рис. 7-28. Установка свойства MdiList

Создание MDI-окон

Как мы уже говорили, MDI-окна обычно используются для отображения различных документов или различных представлений одного и того же документа. В нашем приложении MDIApp MDI-окна будут содержать внутри себя элемент управления RichTextBox, т.е. редактор текста.

Шаблон MDI-окна

Прежде всего, нужно добавить в проект приложения новую форму, которая будет играть роль шаблона для создания дочерних MDI-окон. Для добавления формы щелкните правой клавишей мыши в окне Solution Explorer название проекта MDIApp и выберите в контекстном меню Add строку Add Windows Form.

После этого на экране появится диалоговое окно Add New Item, в котором нужно выбрать значок Windows Form и затем нажать кнопку Open. В результате в окне дизайнера форм появится новая форма Form2.

Так как это окно будет предназначено для редактирования текста, перетащите в него из панели Toolbox значок элемента управления RichTextBox. Чтобы окно редактора текста RichTextBox заполнило собой клиентскую часть MDI-окна, установите значение свойства Dock равным Fill. Кроме того, проследите, чтобы свойство Anchor было равно Top, Left. Установка значений этого свойства выполняется при помощи редактора, окно которого показано на рис. 7-29.

Рис. 7-29. Установка свойства Anchor

Если щелкнуть левую и верхнюю кнопку окна редактирования этого свойства, а также установить правильным образом значение свойства Dock, то будет получен необходимый нам результат. А именно, окно элемента управления RichTextBox будет заполнять клиентскую область MDI-окна при любом изменении размеров последнего.

Программный код для создания MDI-окна

Теперь нам нужно написать программный код, создающий MDI-окна. Этот код должен получать управление, когда пользователь выбирает строку New из меню File.

Добавьте следующий обработчик события Click для упомянутой выше строки New меню File:

private void menuItem2_Click(object sender, System.EventArgs e)
{
Form2 mdiChild = new Form2();
mdiChild.MdiParent = this;
mdiChild.Show();
}

Здесь мы сначала создаем новую форму как объект класса Form2, а затем сохраняем ссылку на эту форму в переменной mdiChild. Свойство MdiParent этого окна должно содержать ссылку на родительское окно приложения MDI, поэтому мы записываем в него ссылку на объект класса Form1, используя ключевое свойство this.

Для того чтобы MDI-окно появилось на экране, его необходимо отобразить явным образом при помощи метода Show.

На рис. 7-30 мы показали главное окно нашего приложения, в котором было создано четыре MDI-окна.

Рис. 7-30. Создано четыре MDI-окна

Создав с помощью меню File несколько дочерних MDI-окон, раскройте меню Window и убедитесь, что в нем появилось несколько новых строк (рис. 7-31).

Рис. 7-31. Новые строки в меню Window

С помощью этих строк Вы сможете выдвинуть на передний план любое нужное Вам MDI-окно.

Упорядочивание MDI-окон

Средства управления дочерними MDI-окнами позволяют легко упорядочить эти окна одним из трех способов.

Прежде всего, окна могут быть упорядочены с перекрытием (каскадным образом), как это показано на рис. 7-30. Кроме этого, возможно расположение окон рядом по горизонтали (рис. 7-32) и по вертикали (рис. 7-33).

Рис. 7-32. Упорядочивание по горизонтали (типа Horizontally Tile)

Рис. 7-33. Упорядочивание по вертикали (типа Vertically Tile)

Чтобы пользователь мог упорядочивать дочерние MDI-окна, мы предусмотрели в меню Window строки Cascade, Horizontally Tile и Vertically Tile. Вот обработчики событий от этих строк меню, которые Вам необходимо добавить в исходный текст приложения:

private void menuItem11_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}

private void menuItem10_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(MdiLayout.TileHorizontal);
}

private void menuItem12_Click(object sender, System.EventArgs e)
{
this.LayoutMdi(MdiLayout.TileVertical);
}

Как видите, все они вызывают метод LayoutMdi родительской формы, передавая ему в качестве параметра одну из констант, определяющих нужный тип упорядочивания. Это константы MdiLayout.Cascade, MdiLayout.TileHorizontal и MdiLayout.TileVertical.

Передача данных через буфер Clipboard

В большинстве случаев для работы с документами, отображаемыми в MDI-окнах, используется одно меню — главное меню приложений. Например, с помощью строк New и Close меню File пользователь нашего приложения MDIApp может, соответственно, создавать и уничтожать MDI-окна.

Теперь мы реализуем операцию обмена данных через универсальный буфер обмена Clipboard, для которого в нашем приложении предусмотрено меню Edit. Строка Copy этого меню должна копировать данные из активного MDI-окна в буфер Clipboard, а строка Paste — вставлять данные из буфера Clipboard в активное MDI-окно. Активным окном здесь называется MDI-окно, имеющее фокус ввода.

Копирование данных в буфер Clipboard

Вначале мы реализуем операцию копирования выделенного фрагмента текста из активного MDI-окна в Clipboard. Для этого добавьте следующий обработчик событий к строке Copy меню Edit:

private void menuItem8_Click(object sender, System.EventArgs e)
{
Form activeChild = this.ActiveMdiChild;

if(activeChild! = null)
{
RichTextBox editBox = (RichTextBox)activeChild.ActiveControl;

if(editBox! = null)
{
Clipboard.SetDataObject(editBox.SelectedText);
}
}
}

Здесь мы вначале определяем идентификатор активного MDI-окна, извлекая его из свойства ActiveMdiChild родительского окна приложения MDI. Этот идентификатор сохраняется в переменной activeChild.

Если в приложении нет активного окна, то приведенный выше обработчик событий завершает свою работу, не выполняя никаких других действий.

Определив идентификатор активного MDI-окна, обработчик события получает идентификатор активного элемента управления, расположенного внутри этого окна. Для этого используется свойство activeChild.ActiveControl, хранящее ссылку на активный элемент управления.

В нашем случае MDI-окно содержит только один элемент управления — редактор RichTextBox. Поэтому полученную ссылку мы преобразуем явным образом к типу RichTextBox и сохраняем в переменной editBox для дальнейшего использования.

Теперь мы получили идентификатор нашего редактора текста и готовы переписать выделенный в его окне фрагмент текста в универсальный буфер обмена Clipboard. Запись в Clipboard осуществляется методом Clipboard.SetDataObject.

В качестве параметра мы передаем методу Clipboard.SetDataObject выделенный текст, извлеченный из редактора текста с помощью свойства editBox.SelectedText.

Вставка данных из буфера Clipboard

Теперь дополним приложение кодом, необходимым для вставки данных из универсального буфера обмена Clipboard в активное MDI-окно.

Добавьте следующий обработчик события для строки Paste меню Edit:

private void menuItem9_Click(object sender, System.EventArgs e)
{
Form activeChild = this.ActiveMdiChild;

if(activeChild! = null)
{
RichTextBox editBox = (RichTextBox)activeChild.ActiveControl;

if(editBox! = null)
{
IDataObject data = Clipboard.GetDataObject();

if(data.GetDataPresent(DataFormats.Text))
{
editBox.SelectedText =
data.GetData(DataFormats.Text).ToString();
}
}
}
}

Как видите, этот обработчик вначале определяет идентификатор активного MDI-окна, а затем, пользуясь этим идентификатором и свойством ActiveControl, получает идентификатор редактора текста RichTextBox.

Далее для вставки данных из буфера Clipboard наш метод получает ссылку на интерфейс IDataObject, вызывая для этого метод Clipboard.GetDataObject. Эта ссылка сохраняется в переменной data.

Пользуясь полученной ссылкой на интерфейс IDataObject, наш обработчик события определяет, имеется ли в буфере Clipboard текст, который можно было бы вставить в редактор текста. Для этого используется метод GetDataPresent. В качестве параметра этому методу передается идентификатор формата текстовых данных DataFormats.Text (напомним, что в буфере Clipboard могут одновременно храниться данные разных форматов).

Если в буфере Clipboard имеются текстовые данные, программа извлекает их при помощи метода GetData, а затем преобразует в текстовую строку при помощи метода ToString. Далее эта текстовая строка записывается в свойство SelectedText нашего редактора текста, благодаря чему и происходит вставка данных из буфера Clipboard.

Визуальное проектирование приложений C#


А.В. Фролов, Г.В. Фролов

Глава 8. Приложения с базами данных.. 3

Методы доступа к СУБД.. 3

Вызов программных интерфейсов. 3

Прямой вызов программного интерфейса СУБД.. 3

Использование программного интерфейса ODBC.. 3

Объектные интерфейсы СУБД.. 4

Интерфейс Remote Data Object 4

Интерфейс OLE DB.. 4

Интерфейс ActiveX Data Objects. 4

Метод доступа ADO.NET. 5

Многоуровневые системы.. 5

Рассоединенные системы.. 5

Распределенная обработка данных и XML. 6

Провайдеры данных для управляемого кода. 6

Работа с объектами DataSet.. 6

Приложение DataSetApp. 6

Добавление элемента управления DataSet 6

Настройка свойств элемента управления DataSet 8

Создание таблиц. 9

Создание столбцов. 11

Первичный ключ. 17

Элемент управления DataGrid.. 18

Добавление объекта DataGrid в проект приложения DataSetApp. 18

Настройка внешнего вида окна элемента управления DataGrid. 22

Рамка вокруг окна. 22

Заголовок окна. 22

Форматирование содержимого окна. 22

Сортировка. 23

Запрет редактирования. 23

Выбор цвета. 23

Набор стилей оформления TableStyles. 23

Программный код. 26

Создание элемента управления DataGrid. 26

Настройка свойств. 26

Добавление таблицы стилей. 26

Работа с DataSet при помощи методов и свойств.. 28

Добавление новой строки. 28

Удаление строки. 29

Приложение PhoneBookApp. 30

Создание проекта приложения. 31

Элементы управления для работы со списком имен и фамилий. 31

Элементы управления для работы со списком телефонов. 32

Создание таблиц базы данных. 33

Таблица Contacts. 33

Таблица Phones. 34

Связывание таблиц Contacts и Phones. 36

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

Добавление нового контакта. 38

Выбор записи в списке имен и фамилий. 39

Редактирование записей таблицы Contacts. 40

Удаление записей таблицы Contacts. 41

Добавление номера телефона. 42

Удаление номера телефона. 42

Изменение номера телефона. 43

Обновление списка контактов. 43

Обновление списка телефонов. 44

Фильтр для метода Select.. 45

Перегруженные методы Select 45

Краткое описание синтаксиса строки фильтра.. 45

Значения. 46

Операторы.. 46

Функции. 46

 

Глава 8. Приложения с базами данных

Большинство деловых и офисных приложений, таких, например, как системы бухгалтерского учета, складские системы и разного рода системы автоматизации финансовой и хозяйственной деятельности предприятий работают с базами данных. Иногда базы данных встраиваются даже в относительно несложные утилиты и программы, например, электронные фотоальбомы, записные книжки и т.п. Многие Web-приложения, рассчитанные для работы в Интернете или интрасетях компаний также интегрируются тем или иным способом с базами данных. Ввиду важности вопроса при рассказе о визуальном проектировании приложений C# мы не можем обойти стороной методики интеграции таких приложений с базами данных.

В [1] мы рассматривали различные способы интеграции автономных и Web-приложений с системой управления базами данных (СУБД) Microsoft SQL Server. Эта СУБД очень популярна на платформе ОС Microsoft Windows, особенно при создании промышленных информационно-справочных систем и различного рода систем автоматизации.

Что же касается приложений C# и платформы Microsoft.NET, то для них компания Microsoft разработала новейший метод доступа ActiveX Data Objects.NET (ADO.NET), наилучшим образом соответствующий нуждам современных приложений. Однако прежде чем приступить к рассказу об ADO.NET, мы сделаем краткий обзор других методов доступа, применяемых в работе с СУБД Microsoft SQL Server, а также с СУБД других типов.

Методы доступа к СУБД

На сегодняшний день разработаны сотни (если не больше) СУБД различных типов, способные работать на компьютерах любой мощности — от майнфреймов до карманных компьютеров и компьютеров, встроенных в мобильные телефоны и другие устройства. К счастью, в этих СУБД и в операционной системе ОС Microsoft Windows предусмотрено относительно небольшое количество универсальных методов доступа, с помощью которых приложения могут быть интегрированы с базами данных.

Все эти методы можно разделить на две группы, первая из которых предполагает прямой или косвенный вызов СУБД через программные интерфейсы, а второй — использование объектных интерфейсов.

Вызов программных интерфейсов

Здесь мы рассмотрим интерфейсы двух типов. Это программные интерфейсы, предназначенные для прямого вызова СУБД, а также универсальный интерфейс ODBC.

Прямой вызов программного интерфейса СУБД

Как правило, СУБД любого типа, предназначенная для работы на платформе Microsoft Windows, предоставляет в распоряжение программиста интерфейс API, с помощью которого программа может выполнять все необходимые операции с базами данных. Физически этот интерфейс обычно реализован с помощью библиотек динамической компоновки DLL, экспортирующих функции доступа к СУБД.

В частности, Microsoft SQL Server предоставляет разработчикам приложений программный интерфейс DB Library —естественный интерфейс данной СУБД, реализованный как набор функций.

Следует заметить, что прямая работа приложений с программным интерфейсом СУБД может привести к проблемам при появлении новых версий этих СУБД. Компания Microsoft, например, не рекомендует использовать в новых приложениях упомянутый выше интерфейс DB Library, оставленный только для совместимости с разработанными ранее приложениями.

Кроме того, технология прямого вызова программного интерфейса СУБД недоступна для разработчиков Web-приложений, использующих так называемые серверные сценарии JavaScript и VB Script (читайте об этом подробнее в [1]).

Использование программного интерфейса ODBC

Программный интерфейс ODBC, как и только что упомянутые интерфейсы прямого вызова СУБД также выполнен в виде набора функций. Это ограничивает его применение в Web-приложениях [1].

Однако интерфейс ODBC, созданный специально для доступа к реляционным базам данных, универсален. Это единый интерфейс, позволяющий приложениям работать с СУБД всех типов, для которых имеется так называемый драйвер ODBC.

Используя ODBC, программист может не заботиться о деталях внутреннего устройства и особенностях естественного интерфейса различных СУБД, т.к. драйвер ODBC полностью скрывает от него эти детали. В результате программы, обращающиеся к базам данных, становятся менее зависимыми от этих баз данных. К сожалению, отличия в реализации драйверов ODBC различных СУБД не всегда позволяют добиться полной независимости программ от типа СУБД.

Объектные интерфейсы СУБД

По мере развития ОС Microsoft Windows и СУБД, на смену программным интерфейсам пришли объектные интерфейсы, основанные на использовании модели компонентных объектов Component Object Model (COM).

Объекты COM можно представить себе как набор интерфейсов, через которые можно получить доступ к свойствам и методам объекта. Если Вы знакомы с классами, интерфейсами и свойствами языка C#, то эти понятия Вам тоже знакомы. Хотя с появлением платформы.NET технология COM становится устаревшей (или, как говорят, унаследованной), до сих пор она интенсивно применяется как в самой ОС Microsoft Windows, так и в приложениях, создаваемых для этой ОС. При необходимости дополнительную информацию о создании объектов COM и ActiveX (также созданных на базе COM) Вы сможете найти в [1], [5] и [6].

В этом разделе мы рассмотрим объектные интерфейсы Remote Data Object (RDO), OLE DB и ActiveX Data Objects (ADO).

Интерфейс Remote Data Object

Объектный интерфейс RDO был разработан для упрощения доступа к серверу СУБД Microsoft SQL Server из приложений Microsoft Visual Basic и Visual Basic for Applications. Он реализует все возможности интерфейса ODBC, однако для его использования приложению не требуется напрямую вызывать какие-либо программные интерфейсы СУБД или ODBC.

Интерфейс OLE DB

Объектный интерфейс OLE DB представляет собой открытый стандарт, предназначенный для универсального доступа приложений к базам данных. В отличие от интерфейса ODBC и RDO, интерфейс OLE DB позволяет приложениям обращаться не только к реляционным БД, но и к нереляционным, таким, например, как серверы почты, базы данных для мэйнфреймов с методами доступа IMS, VSAM и т. д.

Интерфейс OLE DB состоит из трех компонентов: провайдера (provider), потребителя (consumer) и служебного компонента, выполняющего обработку и передачу данных.

В роли потребителя могут выступать приложения. Задача провайдера OLE DB — реализация интерфейса OLE DB. В составе OLE DB поставляются провайдеры для интерфейсов ODBC, для текстовых файлов и некоторые другие. Пользуясь провайдером ODBC, потребители интерфейса OLE DB могут получить доступ к базам данных через драйвер ODBC.

Интерфейс ActiveX Data Objects

Упомянутый выше объектный интерфейс OLE DB не реализует механизм автоматизации, в результате чего этот метод не подходит для создания Web-приложений, основанных на серверных сценариях JavaScript и VB Script [1].

Объектный интерфейс ActiveX Data Objects (ADO) построен на основе интерфейса OLE DB. При этом интерфейс OLE DB обеспечивает универсальный доступ к данным с помощью провайдеров, таких как Microsoft OLE DB Provider для ODBC (MSDASQL) или Microsoft OLE DB Provider для SQL Server (SQLOLEDB).

Благодаря тому, что объекты ADO реализуют средства автоматизации, интерфейс ADO доступен из приложений, составленных с применением целого спектра инструментальных средств, таких, как серверный сценарии ASP, C++, Visual Basic, Visual Basic for Applications, Java и т. д.

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

Вот типичный сценарий работы приложения с базой данных посредством интерфейса ADO:

 установка соединения;

 подготовка команды и параметров;

 выполнение команды;

 обработка результатов выполнения команды;

 закрытие соединения;

 обработка ошибок

Прежде чем обращаться к базе данных, приложение должно установить соединение с сервером базы данных. При этом требуется указать имя источника данных Data Source Name (DSN) или информацию об источнике данных, такую как имя драйвера, имя сервера, пароль и т.д.

После установки соединения приложение должно подготовить объект-команду, записав в его свойства команды, необходимые для доступа к данным (например, строки языка SQL). Приложение может передать вместе с командой параметры. Входные параметры позволяют передавать информацию в хранимые процедуры СУБД Microsoft SQL Server, а выходные — принимать информацию из хранимой процедуры.

Когда программа инициирует выполнение команды, она получает результат в виде набора записей (Recordset) или через выходные параметры хранимой процедуры (если команда запускает такую процедуру). Приложение может просмотреть все записи из полученного набора, сохранить их в памяти или использовать каким-либо другим способом. В частности, можно обновить полученный набор записей с целью обновления источник данных (если это необходимо).

После того как команда выполнена, а результаты ее выполнения обработаны, приложение должно закрыть соединение. Большое количество незакрытых соединений может привести к чрезмерному расходованию ресурсов сервера СУБД.

В процессе подготовки параметров команды и ее выполнения могут возникать ошибки. Приложение должно быть готово их обработать.

Метод доступа ADO.NET

Рассмотренные выше методы доступа с программными и объектными интерфейсами больше всего подходят для создания так называемых клиент-серверных приложений. Такие приложения обычно открывают соединение с базой данных в начале своей работы, а закрывают — при ее завершении. Если пользователей много, то каждый из них будет во время своей работы держать как минимум одно соединение с сервером СУБД (даже во время обеденного перерыва, если клиентская программа запускается на целый день). Это отнимает немало ресурсов сервера и приводит к необходимости приобретения большого количества серверных лицензий.

Многоуровневые системы

С появлением Web-приложений, интегрированных с базами данных, получили развитие так называемые многоуровневые системы. В этих системах клиент (в роли которого выступает обычный браузер, такой, например, как Microsoft Internet Explorer) обращается к СУБД не напрямую, а через Web-сервер.

Такое обращение начинается с того, что бразуер направляет запрос к Web-серверу (например, для выборки данных из базы данных или обновления базы данных). Далее Web-сервер действует следующим образом:

 открывает соединение с СУБД;

 выполняет запрос, обращаясь к базе данных;

 закрывает соединение с базой данных;

 отправляет результат запроса в браузер

Браузер получает результат обработки запроса в виде текстового документа HTML и отображает его в своем окне.

Так как соединение с базой данных устанавливается только на время обработки запроса, это позволяет экономить ресурсы сервера СУБД, а также приобретать небольшое количество клиентских лицензий. Фактически клиентом СУБД в этом случае выступает Web-сервер, и только для него нужны клиентские лицензии.

Рассоединенные системы

Метод доступа ADO.NET, доступный приложениям на платформе Microsoft.NET, позволяет создавать разновидность многоуровневых систем — так называемые рассоединенные (disconnected) системы.

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

Данные, извлеченные из сервера СУБД методом ADO.NET, сохраняются в объекте класса DataSet. Этот объект может хранить в себе одновременно несколько таблиц данных, в том числе связанных между собой (related tables), а также ограничения (constraints). В частности, можно переписать в созданный локально объект DataSet содержимое всей базы данных, расположенной на сервере, если в этом возникнет необходимость.

Вот возможная схема взаимодействия клиента с сервером в рассоединенной системе, реализованной с использованием метода доступа ADO.NET:

 открытие соединения с сервером СУБД;

 отправка запроса к базе данных;

 закрытие соединения;

 обработка данных, полученных в виде объекта класса DataSet;

 открытие соединения с сервером СУБД;

 обновление базы данных с использованием содержимого объекта класса DataSet;

 закрытие соединения

Распределенная обработка данных и XML

Если нужно создать информационную систему с распределенной обработкой данных, встает вопрос организации взаимодействия между серверами и клиентами такой системы. Метод доступа ADO позволяет организовать такую обработку средствами COM, однако этот способ имеет определенные недостатки. Эти недостатки проявляются в тех случаях, когда нужно объединить узлы системы при помощи каналов Интернета.

Дело в том, что корпоративные интрасети, подключенные к Интернету, обычно защищаются брандмауэром (firewall), открывающим доступ только для определенных портов TCP/IP и для определенных протоколов передачи данных. Обычно открывается только порт 80, предназначенный для работы с Web-серверами посредством протокола HTTP, а также порты протоколов SMTP, POP3 и IMAP, с помощью которых осуществляется передача электронной почты. Эти ограничения обычно несовместимы с системами удаленной обработки, реализованными с использованием модели COM.

Что же касается ADO.NET, то этот метод доступа допускает представление данных в формате XML (хорошее описание XML Вы найдете в [9]). При этом данные могут передаваться с использованием протокола HTTP, что позволяет объединять информационные системы каналами Интернета, даже если эти системы защищены брандмауэрами.

Провайдеры данных для управляемого кода

Программный компонент, называемый провайдером данных (data provider) выступает в качестве моста между приложением и источником данных. В его задачу входит извлечение данных из источника, а также обновление источника данных.

Для приложений, содержащих управляемый код и предназначенных для платформы Microsoft.NET, компания Microsoft разработала три провайдера данных. Это SQL Server.NET Data Provider, OLE DB.NET Data Provider и ODBC.NET Data Provider. Первые два из них входят в состав среды исполнения Microsoft.NET Framework, а третий можно загрузить с Web-сайта компании Microsoft по адресу https://msdn.microsoft.com/downloads.

Если Ваше приложение C# должно работать с сервером Microsoft SQL Server версии 7.0 или более новой версии, максимальная производительность будет достигнута при использовании провайдера данных SQL Server.NET Data Provider. К сожалению, специализированных провайдеров для прямого доступа из управляемого кода к СУБД других типов пока не существует.

Что же касается провайдера OLE DB.NET Data Provider, то он пригодится Вам для доступа к базам данных Microsoft Access и другим СУБД, для которых реализованы провайдеры OLE DB.

В том случае, когда единственно возможный способ интеграции приложения и СУБД заключается в использовании драйвера ODBC, можно воспользоваться провайдером ODBC.NET Data Provider.

Работа с объектами DataSet

Как мы уже говорили, объекты DataSet могут содержать в себе отдельные и связанные реляционные таблицы и ограничения. Этот объект, наряду с другими объектами нужными для работы с базами данных, определен в пространстве имен System.Data.

Заметим, что Вы можете создавать приложения с объектами DataSet, которые не взаимодействуют ни с какими серверами баз данных. Более того, изучение ADO.NET мы начнем именно с таких приложений, дополнив их в дальнейшем средствами интеграции с сервером Microsoft SQL Server.

Приложение DataSetApp

Мы подготовили приложение DataSetApp специально для изучения элемента управления DataSet, а также еще одного элемента управления с названием DataGrid. Последний чрезвычайно удобен для отображения содержимого таблиц баз данных в формах приложений с графическим пользовательским интерфейсом, и потому представляет для нас особый интерес.

Объект класса DataSet позволяет создавать наборы реляционных таблиц в оперативной памяти. Эти наборы впоследствии могут быть использованы для инициализации или обновления баз данных, а также экспортированы в формате XML.

Добавление элемента управления DataSet

С помощью мастера проектов создайте приложение DataSetApp, как Вы это делали раньше. Далее откройте в инструментальной панели Toolbox вкладку Data (рис. 8-1).

Рис. 8-1. Вкладка Data инструментальной панели Toolbox

Перетащите из этой вкладки в окно дизайнера форм приложения значок элемента управления DataSet. На экране появится диалоговое окно Add Dataset, показанное на рис. 8-2.

Рис. 8-2. Выбор типа объекта DataSet

В этом окне необходимо выбрать типизированный или не типизированный набор данных. Типизированный набор данных создается на базе ранее определенного в проекте набора данных, имеющего схему XML Schema (файл с расширением.xsd). Для нашего проекта выберите не типизированный набор данных, отметив флажок Untyped dataset, а затем щелкните кнопку OK.

В результате в проект будет добавлен элемент управления класса DataSet с идентификатором dataSet1.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.028 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал