Опубликован: 11.09.2006 | Уровень: специалист | Доступ: свободно
Лекция 4:

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

Модель объектов ADO.NET

Модель объектов ADO.NET состоит из набора классов. DataSet представляет собой класс ADO.NET, который отвечает за отображение таблицы (или таблиц, или даже всей базы) используемой базы данных на компьютере пользователя без непрерывной связи с базой данных. В приложении, созданном с помощью Data Form Wizard, мы имели возможность вносить изменения в загруженную таблицу, перемещаться по записям, причем до нажатия кнопки Update изменения в самой базе данных, т.е. в файле RBProduct.mdb, не происходили. В чем же дело? Дело в том, что все данные и были загружены в объект DataSet, созданный мастером. Только при нажатии кнопки Update происходила передача данных из DataSet в саму базу данных. Не следует путать объект DataSet c оперативной памятью компьютера – загруженная таблица не находится в оперативной памяти компьютера.

Представьте себе, что вы обслуживаете гипотетическую доску объявлений. Каждое утро вы берете обычный бумажный блокнот, записываете в него все свежие объявления, хранящиеся в централизованном банке данных, и отправляетесь к доске. Вы переписываете с блокнота на доску все объявления, а в блокнот записываете все те объявления, которые были добавлены на доску посетителями. Затем вы возвращаетесь в банк данных и вносите в него информацию, которую записали в блокнот c доски. Ваш блокнот и будет являться экземпляром класса DataSet. В этом процессе самым важным — для вас конечно, не для централизованного банка данных, — будет ваш блокнот. Аналогично, класс DataSet является ключевым во всей модели классов ADO.NET.

DataSet состоит из объектов типа DataTable и объектов DataRelation. В коде к ним можно обращаться как к свойствам объекта DataSet, т. е. используя точечную нотацию. Свойство Tables возвращает объект типа DataTableCollection, который содержит все объекты DataTable используемой базы данных.

Таблицы и поля (объекты DataTable и DataColumn)

Объекты DataTable используются для представления таблиц в DataSet. DataTable представляет одну таблицу из базы данных. В свою очередь, DataTable составляется из объектов DataColumn.

DataColumn — это блок для создания схемы DataTable. Каждый объект DataColumn имеет свойство DataType, которое определяет тип данных, содержащихся в каждом объекте DataColumn. Например, вы можете ограничить тип данных до целых, строковых и десятичных чисел. Поскольку данные, содержащиеся в DataTable, обычно переносятся обратно в исходный источник данных, вы должны согласовывать тип данных с источником.

Объекты DataRelation

Объект DataSet имеет также свойство Relations, возвращающее коллекцию DataRelationCollection, которая, в свою очередь, состоит из объектов DataRelation. Каждый объект DataRelation выражает отношение между двумя таблицами (сами таблицы связаны по какому-либо полю (столбцу); следовательно, эта связь осуществляется через объект DataColumn ).

Строки (объект DataRow)

Коллекция Rows объекта DataTable возвращает набор строк (записей) заданной таблицы. Эта коллекция используется для изучения результатов запроса к базе данных. Мы можем обращаться к записям таблицы как к элементам простого массива.

DataAdapter

DataSet — это специализированный объект, содержащий образ базы данных. Для осуществления взаимодействия между DataSet и источником данных используется объект типа DataAdapter. Само название этого объекта — адаптер, преобразователь, — указывает на его природу. DataAdapter содержит метод Fill() для обновления данных из базы и заполнения DataSet.

Объекты DBConnection и DBCommand

Объект DBConnection осуществляет связь с источником данных. Эта связь может быть одновременно использована несколькими командными объектами. Объект DBCommand позволяет послать базе данных команду (как правило, команду SQL или хранимую процедуру). Объекты DBConnection и DBCommand иногда создаются неявно в момент создания объекта DataSet, но их также можно создавать явным образом.

Использование визуальной среды для работы с ADO.NET

Когда мы перетаскиваем на форму элемент управления, Visual Studio .NET автоматически генерирует код, описывающий этот элемент. Если при размещении кнопок, текстовых полей и других элементов управления создавать их программно нецелесообразно, то при работе с элементами данных все как раз наоборот – лучше всего создавать все объекты ADO.NET вручную, что обеспечивает большую гибкость приложения. Тем не менее на первых порах использования ADO.NET полезно работать с визуальной средой разработки.

Рассмотрим работу с базой данных Microsoft Acсess xtreme3База данных Microsoft Access расположена по адресу: С(имя диска):\Program Files\Microsoft Visual Studio .NET 2003\Crystal Reports\Samples\Database\xtreme.mdb , входящей в состав Microsoft Visual Studio .NET, и работу с базой Microsoft SQL4Разумеется, на вашем компьютере должен быть установлен Microsoft SQL Server 2000 и запущено приложение Service Manager. NorthwindCS. В каждой базе есть таблица Customer(s)5В MS Access таблица называется Customer, в SQL — Customers.. Наша задача – вывести содержимое двух таблиц Customer на две Windows- формы.

Microsoft Access, база данных xtreme Microsoft SQL, база данных NorthwindCS

Запустите Visual Studio .NET, создайте новый проект, тип проекта — Windows Application.

Назовите его VisualDataMDB Назовите его VisualDataSQLs

Размещаем на создавшейся форме элемент управления DataGrid, свойству Dock устанавливаем значение Fill. Теперь в окне ToolBox переходим на закладку Data (рис. 4.29).

На вкладке Data находятся все элементы управления для работы с ADO.NET

Рис. 4.29. На вкладке Data находятся все элементы управления для работы с ADO.NET
Поместите на форму объект OleDbDataAdapter Поместите на форму объект SqlDataAdapter

Перед нами появляется Мастер настройки элемента управления. Для OleDbDataAdapter этот Мастер тот же самый, который был описан и изображен на рис. 4.23-4.24. Вернитесь к этим рисункам и сконфигурируйте эти два шага OleDbDataAdapter самостоятельно. Для SqlDataAdapter на вкладке "Поставщик данных" по умолчанию выбран необходимый поставщик (рис. 4.30).

Поставщик данных Microsoft OLE DB Provider for SQL Server

Рис. 4.30. Поставщик данных Microsoft OLE DB Provider for SQL Server

Нажимаем кнопку "Далее" (или переходим на вкладку "Подключение") (рис. 4.31).

Определение параметров подключения

Рис. 4.31. Определение параметров подключения

Для подключения к базе данных SQL, расположенной на вашем компьютере, в пункте 1 вводим (local) или просто точку — ".", в пункте 2 используем учетные сведения системы (по умолчанию пароль учетной записи администратора SQL Server – пустой). В пункте 3 выбираем базу данных NorthwindCS. В следующем шаге Мастера — определение типа запроса — параметры, предлагаемые Мастером, будут отличаться (рис. 4.32 и рис. 4.33):

Определение типа запросов объекта OleDbDataAdapter

Рис. 4.32. Определение типа запросов объекта OleDbDataAdapter
Определение типа запросов объекта SqlDbDataAdapter

Рис. 4.33. Определение типа запросов объекта SqlDbDataAdapter

Для базы данных Microsoft Access мы можем использовать только SQL-запросы: другие значения не активны. Для базы данных Microsoft SQL Server мы можем либо использовать SQL-запросы, либо создать новую хранимую процедуру (stored procedure), либо использовать существующую хранимую процедуру. Различия подобного рода определяются типом баз данных. Для объекта SqlDataAdapter оставляем значение, предложенное по умолчанию, — использование SQL-запросов.

В следующем шаге — создание SQL-запросов (Generate SQL statements) — мы можем вводить текст запроса непосредственно. Но удобнее всего воспользоваться "Построителем запросов": нажимаем на кнопку "Query Builder…" (рис. 4.34) (Поскольку окна добавления таблиц для обеих баз данных одинаковы — незначительно различается лишь содержимое — я привожу рисунок для OleDbDataAdapter).

Добавление таблицы в окно Построителя запросов

Рис. 4.34. Добавление таблицы в окно Построителя запросов
Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/