Dataadapter c что это
Среди множества методов классов DataReader ( SqlDataReader и OleDbDataReader ) около десятка методов, имена который начинаются с приставки Get. , следом за которой – имя какого-то типа. GetInt32, GetBoolean, .
С помощью этих методов от DataReader можно получить и типизированные значения, а не только объекты базового типа!
DataAdapter
DataAdapter – составная часть провайдера данных. То есть подсоединенная компонента объектной модели ADO .NET. Используется для заполнения объекта DataSet и модификации источника данных. Выполняет функции посредника при взаимодействии БД и объекта DataSet .
Обеспечивает связь между источником данных и объектом DataSet . С одной стороны, база данных, с другой – DataSet . Извлечение данных и заполнение объекта DataSet – назначение DataAdapter ‘а.
Функциональные возможности DataAdapter ‘а реализуются за счет:
- метода Fill , который изменяет данные в DataSet . При выполнении метода Fill объект DataAdapter заполняет DataTable или DataSet данными, полученными из БД. После обработки данных, загруженных в память, с помощью метода Update можно записать модифицированные записи в БД;
- метода Update , который позволяет изменять данные в источнике данных с целью достижения обратного соответствия данных в источнике данных по отношению к данным в DataSet .
Фактически, DataAdapter управляет обменом данных и обновлением содержимого источника данных.
DataAdapter представляет набор команд для подключения к базе данных и модификации данных.
Три способа создания DataAdapter :
- с помощью окна Server Explorer;
- с помощью мастера Data Adapter Configuration Wizard;
- ручное объявление и настройка в коде.
Достойны особого внимания ЧЕТЫРЕ свойства этого класса, фактически представляющие команды БД. Через эти команды объект DataAdapter и воздействует на DataSet и Базу.
- SelectCommand – содержит текст (строку sql) или объект команды, осуществляющей выборку данных из БД. При вызове метода Fill эта команда выполняется и заполняет объект DataTable или объект DataSet .
- InsertCommand – содержит текст (строку sql) или объект команды, осуществляющий вставку строк в таблицу.
- DeleteCommand – содержит текст (строку sql) или объект команды, осуществляющий удаление строки из таблицы.
- UpdateCommand – содержит текст (строку sql) или объект команды, осуществляющий обновление значений в БД.
Транзакция
Под транзакцией понимается неделимая с точки зрения воздействия на базу данных последовательность операторов манипулирования данными:
- чтения,
- удаления,
- вставки,
- модификации, приводящая к одному из двух возможных результатов:
- либо последовательность выполняется, если все операторы правильные,
- либо вся транзакция откатывается, если хотя бы один оператор не может быть успешно выполнен.
Прежде всего, необходимым условием применения транзакций как элементов модели ADO .NET является поддержка источником данных (базой данных) концепции транзакции. Обработка транзакций гарантирует целостность информации в базе данных. Таким образом, транзакция переводит базу данных из одного целостного состояния в другое.
При выполнении транзакции система управления базами данных должна придерживаться определенных правил обработки набора команд, входящих в транзакцию. В частности, гарантией правильности и надежности работы системы управления базами данных являются четыре правила, известные как требования ACID.
- Atomicity – неделимость. Транзакция неделима в том смысле, что представляет собой единое целое. Все ее компоненты либо имеют место, либо нет. Не бывает частичной транзакции. Если может быть выполнена лишь часть транзакции, она отклоняется.
- Consistency – согласованность. Транзакция является согласованной, потому что не нарушает бизнес-логику и отношения между элементами данных. Это свойство очень важно при разработке клиент-серверных систем, поскольку в хранилище данных поступает большое количество транзакций от разных систем и объектов. Если хотя бы одна из них нарушит целостность данных, то все остальные могут выдать неверные результаты.
- Isolation – изолированность. Транзакция всегда изолированна, поскольку ее результаты самодостаточны. Они не зависят от предыдущих или последующих транзакций – это свойство называется сериализуемостью и означает, что транзакции в последовательности независимы.
- Durability – устойчивость. Транзакция устойчива. После своего завершения она сохраняется в системе, которую ничто не может вернуть в исходное (до начала транзакции) состояние, т.е. происходит фиксация транзакции, означающая, что ее действие постоянно даже при сбое системы. При этом подразумевается некая форма хранения информации в постоянной памяти как часть транзакции.
Указанные выше правила реализуются непосредственно источником данных. На программиста возлагаются обязанности по созданию эффективных и логически верных алгоритмов обработки данных. Он решает, какие команды должны выполняться как одна транзакция, а какие могут быть разбиты на несколько последовательно выполняемых транзакций.
Работа с транзакцией предполагает следующую последовательность действий:
- Инициализация транзакции.
Обеспечивается вызовом метода BeginTransaction() от имени объекта Connection , представляющего открытое соединение. В результате выполнения этого метода возвращается ссылка на объект – представитель класса Transaction , который должен быть записан в свойство Transaction всех объектов-команд, которые должны быть задействованы в данной транзакции.
Ниже приводится пример исполнения транзакции с помощью объекта соединения класса OleDbConnection с именем xConnection и пары объектов OleDbCommand с именами xCommand1 и xCommand2 :
Работа с SqlDataAdapter и DataSet
Ранее для получения данных мы использовали объект SqlDataReader, с помощью которого построчно можно перебрать ответ от сервера базы данных. Но есть и другой способ, который демонстрирует использование объектов SqlDataAdapter и DataSet. DataSet представляет хранилище данных, с которыми можно работать независимо от наличия подключения, а SqlDataAdapter заполняет DataSet данными из БД.
Для получения данных через объект SqlDataAdapter необходимо организовать подключение к БД и выполнить команду SELECT. Есть несколько способов создания SqlDataAdapter:
Можно использовать конструктор без параметров, а команду SELECT и подключение установить позже
Можно передать в конструктор объект SqlCommand
Можно в конструкторе установить sql-выражение SELECT и объект SqlConnection
Можно в конструкторе установить sql-выражение SELECT и строку подключения
Рассмотрим, как получить данные в DataSet через SqlDataAdapter. Для работы с DataSet особенно удобно использовать элементы управления, которые могут заполняться из внешнего источника данных, например, DataGridView в Windows Forms. Поэтому создадим новый проект по типу Windows Forms Application.
Добавим на единственную форму в проекте элемент DataGridView и определим следующий код формы:
В конструкторе формы в DataGridView загружаются данные. Для загрузки данных создается объект SqlDataAdapter, который принимает объект подключения и sql-выражение SELECT. Затем создается объект DataSet и с помощью метода adapter.Fill() в него загружаются данные. Дальше происходит установка источника данных для DataGridView:
В качестве источника устанавливается одна из таблиц в DataSet. Каждая таблица представляет объект DataTable, и в DataSet может быть определено несколько таких таблиц. Но в данном случае при выборке в DataSet есть только одна таблица, которую мы можем получить из коллекции Tables по индексу.
Data Adapter Класс
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет набор команд SQL и подключение к базе данных, которые используются для заполнения DataSet и обновления источника данных.
Комментарии
Служит DataAdapter мостом между источником DataSet данных для получения и сохранения данных. Этот DataAdapter мост предоставляется путем сопоставления Fill, который изменяет данные в DataSet соответствии с данными в источнике данных, а Updateтакже изменяет данные в источнике данных в соответствии с данными в источнике DataSetданных.
При подключении к базе данных SQL Server можно повысить общую производительность с помощью SqlDataAdapter связанных с ней объектов и связанных с ней SqlCommand SqlConnection объектов. Для источников данных, поддерживаемых OLE DB, используйте DataAdapter его со связанными и OleDbCommand OleDbConnection объектами. Для источников данных, поддерживаемых ODBC, используйте DataAdapter его со связанными и OdbcCommand OdbcConnection объектами. Для баз данных Oracle используйте DataAdapter связанные OracleCommand с ним объекты и OracleConnection связанные с ними объекты.
При создании экземпляра DataAdapter свойства чтения и записи задаются в качестве начальных значений. Список этих значений см. в конструкторе DataAdapter.
Конструкторы
Инициализирует новый экземпляр класса DataAdapter.
Инициализирует новый экземпляр DataAdapter класса из существующего объекта того же типа.
Свойства
Возвращает или задает значение, указывающее, вызывается ли метод AcceptChanges() в объекте DataRow после его добавления к объекту DataTable при выполнении любой из операций Fill.
Возвращает или задает, вызывается ли метод AcceptChanges() при вызове метода Update(DataSet).
Возвращает значение, показывающее, может ли компонент вызывать событие.
Возвращает объект IContainer, который содержит коллекцию Component.
Возвращает или задает значение, указывающее, следует ли генерировать ли исключение при обнаружении ошибки во время обновления строки.
Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.
Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.
Возвращает или задает значение перечисления типа LoadOption, определяющее, как адаптер заполняет объект DataTable из объекта DbDataReader.
Определяет действие, выполняемое, если входные данные не соответствуют таблице или столбцу.
Определяет действие, которое должно быть выполнено, если существующая схема DataSet не соответствует входным данным.
Возвращает или задает, должен ли метод Fill возвращать зависящие от поставщика значения или обычные CLS-совместимые значения.
Получает или задает ISite объекта Component.
Возвращает коллекцию, которая предоставляет основное сопоставление между исходной таблицей и a DataTable.
Методы
Создает дубликат этого экземпляра класса DataAdapter.
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.
Освобождает все ресурсы, занятые модулем Component.
Освобождает неуправляемые ресурсы, используемые объектом DataAdapter, а при необходимости освобождает также управляемые ресурсы.
Определяет, равен ли указанный объект текущему объекту.
Добавляет или обновляет строки в DataSet для получения соответствия строкам в источнике данных.
Добавляет или обновляет строки в указанном диапазоне в объект DataSet для получения соответствия строкам в источнике данных с использованием имен DataSet и DataTable.
Добавляет или обновляет строки в DataTable для получения соответствия строкам в источнике данных с помощью имени DataTable и указанного интерфейса IDataReader.
Добавляет или обновляет строки в указанной коллекции объектов DataTable для получения соответствия строкам в источнике данных.
Добавляет объект DataTable в указанный объект DataSet и настраивает схему для соответствия этому объекту в источнике данных на основе указанного значения типа SchemaType.
Добавляет объект DataTable к указанному объекту DataSet.
Добавляет объект DataTable к указанному объекту DataSet.
Получает параметры, заданные пользователем при выполнении оператора SQL SELECT.
Служит хэш-функцией по умолчанию.
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.
Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.
Возвращает объект Type для текущего экземпляра.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.
Создает неполную копию текущего объекта Object.
Создает неполную копию текущего объекта MarshalByRefObject.
Вызывается при возникновении ошибки, когда применяется метод Fill .
Сбрасывает свойство FillLoadOption к состоянию по умолчанию и вызывает метод Fill(DataSet) для обеспечения поддержки свойства AcceptChangesDuringFill.
Определяет, должно ли сохраняться свойство AcceptChangesDuringFill.
Определяет, должно ли сохраняться свойство FillLoadOption.
Определяет, существует ли один или несколько объектов DataTableMapping и нужно ли их сохранить.
Возвращает объект String, содержащий имя Component, если оно есть. Этот метод не следует переопределять.
Вызывает соответствующие операторы INSERT, UPDATE или DELETE для каждой вставленной, обновленной или удаленной строки в указанном объекте DataSet из DataTable с именем "Table".
События
Возникает при удалении компонента путем вызова метода Dispose().
Возвращается при возникновении ошибки во время работы операции заполнения.
Явные реализации интерфейса
Возвращает коллекцию, показывающую, как исходная таблица сопоставляется с таблицей набора данных.