280 likes | 460 Views
ADO.NET. Интегрированная среда разработки. ADO.NET. Общая картина
E N D
ADO.NET Интегрированная среда разработки
ADO.NET • Общая картина • Все типы ADO.NET предназначены для выполнения одного набора задач: установить соединение с базой данных, создать и заполнить данными объект DataSet, отключиться от хранилища данных, вернуть изменения внесенные в DataSet обратно в базу. • DataSet представляет собой локальную копию взаимосвязанных таблиц. • После создания DataSet и его заполнения данными мы можем программными средствами производить запросы к нему и передвигаться по таблицам. • Мы можем добавлять, удалять и изменять данные, накладывать фильтры и тд.
База данных на сервере DataSet1 DataSet2 Прикладная программа 1 Прикладная программа 2
DataSet • Модель объектов ADO.NET очень обширна, но в ее основе лежит довольно простой набор классов. Наиболее важным из них считается DataSet. • DataSet представляет собой отображение используемой базы данных, перенесенное на машину пользователя. При этом нет необходимости постоянно подключаться к серверу базы данных для модификации данных. • Лишь иногда вы соединяете DataSet с его родительской базой данных и модифицируете ее внесенными вами изменениями. В то же время вы модифицируете DataSet теми изменениями в базе данных, которые сделали другие процессы.
DataSet • DataSet состоит из объектов типа DataTable и объектов DataRelation. • К ним можно обращаться как к свойствам объекта DataSet. Свойство Tables возвращает объект типа DataTableCollection, который содержит все объекты DataTable используемой базы.
Объекты DataTableи DataColumnТаблицы и поля • Объект типа DataTable представляет собой таблицу базы данных. Такой объект может быть создан программно или путем запроса к базе данных. • Объект DataTable состоит из строк и столбцов. Строки представляют собой отдельные записи таблицы, столбцы — соответствующие поля. Для получения совокупности столбцов объект DataSet имеет свойство Columns, возвращающее DataColumnCollection, которое в свою очередь состоит из объектов типа DataColumn. • Каждый объект DataColumn представляет собой отдельный столбец таблицы, из которого можно получить любую запись.
ОбъектDataRelationСвязи между таблицами • Кроме набора таблиц DataSetимеет свойство Relations, которое возвращает объект типа DataRelation Collection, состоящий из объектов DataRelation. Каждый DataRelationобъект хранит данные о связях между двумя таблицами посредством объектов DataColumn. Такое отношение называется на языке баз данных один ко многим (one-to-many).
Объект DataRowСтроки • Свойство Rows объекта DataTable возвращает совокупность всех строк таблицы — DataRowCollection. Это свойство следует применять для того, чтобы пользоваться результатами запросов к базе данных. • Вы можете обращаться к записям таблицы как к элементам простого массива. Это значительно упрощает процесс доступа к элементам базы. Мы рассмотрим это более подробно далее на примере.
DataAdapter • DataSet —это образ реляционной базы данных. ADO.NET использует объект типа DataAdapter как мост между DataSet и источником данных, который является основной базой данных. • DataAdapter содержит метод Fill() для обновления данных из базы и заполнения DataSet.
DataAdapter База данных (Источник данных) DataAdapter DataSet Fill() Fill() Прикладная программа
DBCommand и DBConnection • Объект DBConnection представляет собой средство для соединения DataSet с источником данных. Соединение может быть доступно при помощи различных командных объектов. • Например, объект DBCommand позволяет послать команду (обычно это SQL запрос или сохраненная процедура) к базе данных. Часто командные объекты создаются неявно, во время формирования объекта DataSet. • ADO.NET позволяет вам явно обращаться к таким объектам
Провайдеры данных .NET • В ADO.NET используются так называемые провайдеры данных (Data Providers) .NET. Они обеспечивают доступ к соответствующим источникам данных и содержат четыре ключевых объекта: • Connection, Command, DataReaderи DataAdapter. • Например, провайдер: • SQL Server .NET Data Provider.
Структура пространств имен • Типы (классы, структуры, перечислимые и т.д.), связанные с каждым из провайдеров данных .NET, находятся в собственных пространствах имен: • • System.Data.SqlClient. Содержит типы SQL Server .NET Data Provider, Руководство по архитектуре доступа к данным на платформе .NET • • System.Data.OleDb. Содержит типы OLE DB .NET Data Provider. • • System.Data.Оdbc. Содержит типы ODBC .NET Data Provider. • • System.Data. Содержит типы, независимые от провайдеров, например DataSetи DataTable.
Структура пространств имен • Для каждого из провайдеров в его пространстве имен содержатся реализации объектов Connection, Command, DataReader и DataAdapter. • Имена реализаций объектов из пространства имен SqlClient начинаются с префикса "Sql", а имена реализаций из пространства имен OleDb — с префикса «OleDb». • Реализация объекта Connection из пространства имен SqlClient называется SqlConnection, тогда как ее эквивалент из OleDb — OleDbConnection. • Соответствующие реализации объекта DataAdapter называются SqlDataAdapter и OleDbDataAdapter.
Использование объекта DataSet • Для обычного разработчика это означает, что класс DataSet предоставляет средства моделирования реляционных данных в памяти. И если ADO.NET в целом предпо- лагает работу с данными в отсоединенном режиме, объект DataSet позволяет «скрыть» этот факт и обращаться к информации так, как будто бы она находится в базе данных.
Использование объекта Connection • using System; using System.Data; using System.Data.OleDb; // Создание объекта Connection. • OleDbConnection conn = new OleDbConnection("Provider=SQLOLEDB;" + "Server=vmkss-serv;" "Database=ADONET;" + "UID=someuser; ") ; // Установка соединения с базой данных. conn.Open() ;
Использование объекта DataSet • // Создание объектов DataSet and Command. DataSet ds = new DataSet(); OleDbDataAdapter daAuthors = new OleDbDataAdapter("SELECT * FROM CUSTOMER",conn); // Заполнение объекта DataSet. daAuthors, Fill(ds); // Теперь мы можем закрыть соединение, conn.Close () ; // Извлечение таблицы из объекта DataSet. DataTable tbl = ds.Tables["Table"]; // Обработка всех строк таблицы, foreach (DataRow row in tbl.Rows) ( // Вывод на консоль значения всех полей заданной строки, foreach (Object val in row.ItemArray) { Console.Write{val.ToStringO); } Console.WriteLine(""); // Вывод пустой строки.
Обновление БД с помощью объекта DataSet • Объект DataSet предоставляет возможность извлечения подмножества данных, которые были изменены, удалены или добавлены, что позволяет проверить их достоверность перед тем, как отразить изменения непосредственно в базе данных.
Обновление БД с помощью объекта DataSet • Поскольку мы уже создали объектDataAdapter, нам остается связать с ним объект CommandBuilder и вызвать метод DataAdapter.Update () для обновления, добавления или удаления записей. • Соответствующие операции выполняются с помощью команд, заданных свойствами объекта DataAdapter InsertCommand, UpdateCommand и DeleteCommand .
Первый шаг – создаем Connection • using System; using System.Data; using System.Data.OleDb; // Создание объекта Connection. OleDbConnection conn = new OleDbConnection("Provider=SQLOLEDB; " + "Server=vmkss-serv;" + "Database=ADONET;" + "UID=sa;"};
Второй шаг – создаем DataSet • // Создание объектов DataSet и Command. DataSet ds = new DataSet (); OleDbDataAdapter daAuthors = new OleDbDataAdapter("SELECT * FROM CUSTOMER", conn);
Третий шаг – создаем CommandBuilder • // Создание объекта OleDbCommandBuilder // оболочки объекта DataAdapter, поддерживающей // динамическое генерирование команд // обновления, добавления и удаления данных. OleDbCommandBuilder bldr = new OleDbCommandBuilder (daAuthors);
Четвертый шаг - Adapter • // Заполнение объекта DataSet. daAuthors.Fill(ds); • // Извлечение таблицы из объекта DataSet. DataTable tbl = ds.Tables["Table"];
Комментарий • Был создан экземпляр класса OleDbCommandBuilder. При создании объекта CommandBuilder конструктору передается объект DataAdapter. Объект CommandBuilder регистрирует себя в качестве "слушателя" объекта DataAdapter и, при необходимости, создает команды обновления, удаления или вставки данных.
Завершение • Обратите внимание: после выполнения запроса к базе данных (в методе Fill) соединение было закрыто, затем мы заново открываем его непосредственно перед выполнением метода Update (). • conn. Open () ; daAuthors.Update(ds);
Доступ к базе данных SQL Server с помощью поставщика OleDB • using System; using System.Data; using System.Data.OleDb; // Создание объекта Connection. OleDbConnection conn = new OleDbConnection("Provider=SQLOLEDB;" + "Server=localhost;" + "Database=ADONET;" + "UID=someuser;"); // Создание объектов DataSet и Command. DataSet ds = new DataSet(); OleDbDataAdapter daAuthors = new OleDbDataAdapter( "SELECT * FROM CUSTOMER", conn); // Заполнение объекта DataSet. daAuthors.Fill(ds);
Доступ к базе данных SQL Server с помощью поставщика OleDB • // Извлечение таблицы из объекта DataSet. DataTable tbl « ds.Tables["Table"]; // Обработка всех строк таблицы. foreach( DataRow row in tbl.Rows) { // Вывод на консоль значений всех полей заданной строки. foreach {Object val in row.ItemArray} { Console.Write(val.ToString()); } Console.WriteLine(""); // Вывод пустой строки.