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

на главную

Жанры

Обработка баз данных на 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 не переопределяет ее.

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

Игра топа. Революция

Вяч Павел
3. Игра топа
Фантастика:
фэнтези
7.45
рейтинг книги
Игра топа. Революция

Кровь на эполетах

Дроздов Анатолий Федорович
3. Штуцер и тесак
Фантастика:
альтернативная история
7.60
рейтинг книги
Кровь на эполетах

Темный Охотник

Розальев Андрей
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник

Измена. Мой заклятый дракон

Марлин Юлия
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Измена. Мой заклятый дракон

Император поневоле

Распопов Дмитрий Викторович
6. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Император поневоле

Восход. Солнцев. Книга V

Скабер Артемий
5. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга V

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Гром над Империей. Часть 2

Машуков Тимур
6. Гром над миром
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Гром над Империей. Часть 2

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Адепт. Том второй. Каникулы

Бубела Олег Николаевич
7. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.05
рейтинг книги
Адепт. Том второй. Каникулы

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Внешники такие разные

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники такие разные

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8