Чтение онлайн

на главную - закладки

Жанры

Обработка баз данных на Visual Basic®.NET

Прайс Кевин Т.

Шрифт:

Обновление источника данных

Обычно после внесения всех необходимых изменений в таблицы набора данных DataSet потребуется сохранить эти изменения в источнике данных. Для этого нужно вызвать метод Update объекта DataAdapter, который анализирует изменения в указанной таблице набора данных (или сразу во всех таблицах, если ни одна из них не указана явно). Для каждой измененной записи по отношению к источнику данных выполняется команда вставки, обновления или удаления с помощью соответствующего объекта InsertCommand, UpdateCommand или DeleteCommand.

НА ЗАМЕТКУ

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

Каждая измененная запись обновляется отдельно, а не как часть транзакции или пакетной операции. Причем порядок обновления записей определяется порядком их расположения в объекте DataTable.

Для явного управления порядком выполнения операций для заданной таблицы можно использовать методы GetChanges или Select, которые доступны на уровне либо объекта DataSet, либо объекта DataTable. Эти методы используются для извлечения отдельных наборов записей с разными состояниями записей.

Допустим, необходимо обновить базу данных Novelty данными из объекта dsEmployees с помощью объекта daDepartments. Причем сначала требуется выполнить все вставки, затем все обновления, а потом все удаления. Это можно сделать, трижды вызывая метод GetChanges с указанием соответствующих разных состояний записей. После каждого вызова метода GetChanges вызывается метод Update объекта DataAdapter с передачей объекта DataTable, возвращенного методом GetChanges.

dt = dsEmployeeInfo.Tables("Departments")

Внести изменения для каждого типа состояния.

dtChanged = dt.GetChanges(DataRowState.Added)

daDepartments.Update(dtChanged)

dtChanged = dt.GetChanges(DataRowState.Modified)

daDepartments.Update(dtChanged)

dtChanged = dt.GetChanges(DataRowState.Deleted)

daDepartments.Update(dtChanged)

Этот код можно записать более компактно.

dt = dsEmployeeInfo.Tables("Departments")

' Внести изменения для каждого типа состояния.

daDepartments.Update(dt.GetChanges(DataRowState.Added))

daDepartments.Update(dt.GetChanges(DataRowState.Modifled))

daDepartments.Update(dt.GetChanges(DataRowState.Deleted))

Аналогичный результат можно получить с помощью метода Select.

dt = dsEmployeeInfo.Tables("Departments")

' Внести изменения для каждого типа состояния.

daDepartments(Nothing, Nothing, _

 dt.GetChanges(DataViewRowState.Added))

daDepartments.Update(Nothing, Nothing, _

 dt.GetChanges(DataViewRowState.ModifiedCurrent))

daDepartments.Update(Nothing, Nothing, _

 dt.GetChanges(DataViewRowState.Deleted))

Преимущество использования метода Select вместо GetChanges заключается в том, что он может выполнять фильтрацию и сортировку.

Здесь следует напомнить о разнице между операциями удаления записи с помощью методов Remove и о которой сообщалось в главе 5, "ADO.NET: объект DataSet". При использовании метода Remove запись навсегда удаляется из коллекции, а при удалении с помощью метода Delete — только отмечается как удаленная. При обновлении источника данных данными из объекта DataTable с помощью объекта DataAdapter нужно использовать метод Delete, а не Remove. Когда объект DataAdapter встречает помеченную для удаления запись, он автоматически выполняет команду DeleteCommand для базы данных, чтобы осуществить синхронизацию с объектом DataTable. Если вместо метода Delete использовать Remove, то объект DataAdapter не обнаружит уже удаленную запись из объекта DataTable и не сможет удалить ее из источника данных.

Указание команд обновления

Объект DataAdapter не создает автоматически команды INSERT, UPDATE и DELETE для обновления источника данных в соответствии с изменениями данных в объекте DataSet. Если при вызове команды метода Update не была указана команда INSERT, UPDATE или DELETE, то генерируется исключительная ситуация. Эти команды можно указать одним их следующих способов:

• использовать объект CommandBuilder для автоматической генерации команд во время выполнения приложения;

• явно запрограммировать эти команды;

• использовать компонент DataAdapter DesignTime Component и мастер конфигурирования объекта DataAdapter Configuration Wizard.

Использование объекта CommandBuilder

Это самый простой способ, но он связан с существенными ограничениями. Он аналогичен применению метода BatchUpdate в модели ADO 2.X. Когда объект CommandBuilder связывается с соответствующим ему объектом DataAdapter, он автоматически может задавать значения свойств InsertCommand, UpdateCommand и DeleteCommand для данного объекта DataAdapter. А если эти свойства имеют ненулевые значения (т.е. для них не задано значение Nothing), то объект-команда уже существует и объект CommandBuilder не переопределяет ее.

Поделиться:
Популярные книги

Неучтенный элемент. Том 6

NikL
6. Антимаг. Вне системы
Фантастика:
фэнтези
5.25
рейтинг книги
Неучтенный элемент. Том 6

Солдат Империи

Земляной Андрей Борисович
1. Страж
Фантастика:
попаданцы
альтернативная история
6.71
рейтинг книги
Солдат Империи

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Воронцов. Перезагрузка. Книга 4

Тарасов Ник
4. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 4

Журнал «Если», 2007 № 04

Олди Генри Лайон
4. Журнал "Если" 2007
Фантастика:
научная фантастика
7.00
рейтинг книги
Журнал «Если», 2007 № 04

Дорога судьбы

Стил Даниэла
Любовные романы:
современные любовные романы
7.17
рейтинг книги
Дорога судьбы

Товарищ "Чума"

lanpirot
1. Товарищ "Чума"
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Товарищ Чума

Личинка

Привалов Сергей
1. Звездный Бродяга
Фантастика:
боевая фантастика
космическая фантастика
рпг
попаданцы
5.00
рейтинг книги
Личинка

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9

Принадлежать им

Зайцева Мария
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Принадлежать им

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
6.00
рейтинг книги
По осколкам твоего сердца

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Танцоры в конце времени

Муркок Майкл Джон
Фантастика:
фантастика: прочее
6.25
рейтинг книги
Танцоры в конце времени

Кодекс Императора

Сапфир Олег
1. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
4.25
рейтинг книги
Кодекс Императора