ADO.NET Интегрированная среда разработки
ADO.NET Общая картина Все типы ADO.NET предназначены для выполнения одного набора задач: установить соединение с базой данных, создать и заполнить данными объект DataSet, отключиться от хранилища данных, вернуть изменения внесенные в DataSet обратно в базу. DataSet представляет собой локальную копию взаимосвязанных таблиц. После создания DataSet и его заполнения данными мы можем программными средствами производить запросы к нему и передвигаться по таблицам. Мы можем добавлять, удалять и изменять данные, накладывать фильтры и тд.
База данных на сервере DataSet1 Прикладная программа 1 Прикладная программа 2 DataSet2
DataSet Модель объектов ADO.NET очень обширна, но в ее основе лежит довольно простой набор классов. Наиболее важным из них считается DataSet. DataSet представляет собой отображение используемой базы данных, перенесенное на машину пользователя. При этом нет необходимости постоянно подключаться к серверу базы данных для модификации данных. Лишь иногда вы соединяете DataSet с его родительской базой данных и модифицируете ее внесенными вами изменениями. В то же время вы модифицируете DataSet теми изменениями в базе данных, которые сделали другие процессы.
DataSet DataSet состоит из объектов типа DataTable и объектов DataRelation. К ним можно обращаться как к свойствам объекта DataSet. Свойство Tables возвращает объект типа DataTableCollection, который содержит все объекты DataTable используемой базы.
Структура DataSet
Объекты DataTable и DataColumn Таблицы и поля Объект типа DataTable представляет собой таблицу базы данных. Такой объект может быть создан программно или путем запроса к базе данных. Объект DataTable состоит из строк и столбцов. Строки представляют собой отдельные записи таблицы, столбцы соответствующие поля. Для получения совокупности столбцов объект DataSet имеет свойство Columns, возвращающее DataColumnCollection, которое в свою очередь состоит из объектов типа DataColumn. Каждый объект DataColumn представляет собой отдельный столбец таблицы, из которого можно получить любую запись.
Объект DataRelation Связи между таблицами Кроме набора таблиц DataSet имеет свойство Relations, которое возвращает объект типа Data Relation Collection, состоящий из объектов DataRelation. Каждый DataRelation объект хранит данные о связях между двумя таблицами посредством объектов DataColumn. Такое отношение называется на языке баз данных один ко многим (one-to-many).
Объект DataRow Строки Свойство Rows объекта DataTable возвращает совокупность всех строк таблицы DataRowCollection. Это свойство следует применять для того, чтобы пользоваться результатами запросов к базе данных. Вы можете обращаться к записям таблицы как к элементам простого массива. Это значительно упрощает процесс доступа к элементам базы. Мы рассмотрим это более подробно далее на примере.
DataAdapter DataSet это образ реляционной базы данных. ADO.NET использует объект типа DataAdapter как мост между DataSet и источником данных, который является основной базой данных. DataAdapter содержит метод Fill() для обновления данных из базы и заполнения DataSet.
DataAdapter База данных (Источник данных) DataAdapterDataSet 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(""); // Вывод пустой строки.