Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Обработка ошибок при обновлении базы данных
8 февраля 2009

Причины ошибок, возникающих при обновлении данных, бывают самыми разны-
ми: вставка записи с дублирующимся значением первичного ключа, попытка моди-
фикации строк, используемых другим клиентом и т.д. Разрабатывая код для обнов-
ления строк, необходимо предусмотреть любые ошибки и подготовиться к устране-
нию их последствий.
Объекты Sql DataAdapters и OledbDataAdapters поддерживают событие RowUpdated,
которое генерируется между попыткой обновления строки и любыми возникающи-
ми при этом исключениями. В его обработчик можно поместить код, способный
обработать любые ошибки, возникающие при обновлении, не вовлекая в этот про-
цесс блоки обработки исключений, которые используют много ресурсов.
В зависимости от типа применяемого объекта DataAdapter, событие RowUpdated
передает экземпляр класса SqiRow Updated EventArgs или leDbRowUpdatedEventArgs. Ар-
гументы события RowUpdated позволяют определить, какая ошибка возникла и как
ее обрабатывать. В таблице 6-4 описаны некоторые свойства классов SqlRowUpdated-
EventArgs и OleDb RowUpdated EventArgs.
Таблица 6-4. Свойства класса RowVpdatedEventArgs
Имя Описание
Command Представляет команду, исполняемую при обноапении строки
Errors Возвращает любые ошибки, генерируемые провайдером данных
при исполнении этой команды
RecordsAffected Возвращает число записей, измененных при исполнении команды,
которая задана свойством Command
Row Возвращает обновленную строку
Status Возвращает значение свойства UpdateStatus объекта команды
Чтобы во время обработки события RowUpdated определить, произошла ли ошиб-
ка, проверьте свойство Status объекта аргументов события. Это свойство может при-
нимать следующие четыре значения:
• Continue — объект DataAdapter продолжит обработку строк. Если ошибки не воз-
никают, свойство Status сохраняет это значение;
• ErrorsOccurred — при попытке обновления данной строки возникла одна или не-
сколько ошибок;
• SkipAllRemainingRows — при обновлении текущую строку и все остальные следу-
ет пропустить;
• SkipCurrentRow — при обновлении следует пропустить только текущую строку.
При возникновении ошибки свойство Status получает значение Errors Occurred,
Обработчик событий RowUpdated позволяет обработать возникшую ошибку, изме-
нив значение свойства Status. Если свойство Status установлено в SkipCurrentRow,
при обновлении объект DataAdapter пропустит строку, вызвавшую ошибку, и пе-
рейдет к другим строкам. Если же свойство Status установлено в SkipAllRemaining-
Rows, DataAdapter прекратит обновление. Если Status^ Continue, объект DataAdapter
игнорирует ошибку и продолжает обновление. Имейте в виду, что в зависимости от
типа источника данных, это может привести к получению непредсказуемых резуль-
татов. Если свойство Status сохраняет значение ErrorsOccurred, генерируется исклю-
чение, которое передается обработчику исключений приложения.
Сведения о возникшей ошибке получают с помощью свойства Errors, которое
возвращает объект исключения, представляющий возникшую ошибку.
Выбор способа обработки ошибок, возникающих при обновлении БД, опреде-
ляется главным образом особенностями приложения. В одних случаях исключения
лучше передавать для обработки коду приложения, а в других — использовать для
этого обработчик события RowUpdated. Следующий пример иллюстрирует простую
схему обработки ошибок обновления с помощью события Rowllpdated объекта
SqlData Adapter.
Visual Basic .NET
Private Sub myDataAdapter_RowUpdated(ByVal sender As Object,
ByVal e As System.Data.SqlClient.SqlRowUpdatedEventArgs)
Handles myDataAdaoter.RowUpdated
Проверить свойство Status объектов аргументов события на наличие ошибок.
If e.Status = UpdateStatus.ErrorsOccurred then
1 Уведомить пользователя об ошибке и
предоставить ее описание.
MessageBox.Show("An error of type " & e. Errors.ToStringO &
"occurred. Here is some additional information: " &
e,Errors.Message)
Пропустить данную строку при обновлении,
e.Status - UpdateStatus.SkipCurrentRow
End If
End Sub
Visual C#
private void myDataAdapter__RowUpda:ed(object sender,
System.Data.SqlClient.SqlflowUpdatedEventArgs e}
{
// Проверить свойство Status объектов аргументов события на наличие ошибок.
if (e.Status == UpdateStatus.ErrorsOccurred)
{
// Уведомить пользователя об ошибке и
// предоставить ее описание.
MessageBox.Show("An error of type " + e. Errors.ToStringO +
"occurred. Hero is some additional information: " +
e.Errors.Message);
// Пропустить данную строку при обновлении,
e.Status = UpdateStatus.SkipCjrrentRow:


Теги: .NET

Статьи по теме:

Извлечение и обновление данных с помощью объектов DataAdapter и DataSet
Декларативная защита по правам доступа к коду
Обработка событий клавиатуры на уровне формы
Свойства, доступные только для чтения или только для записи
Применение элемента управления PrintPreviewControl
Интерфейсы как средство достижения полиморфизма
Работа с фокусом ввода
Модификация и обновление данных
Реализация полиморфизма через наследование
Свойства BackColor, ForeColor и Text
Применение событий формы
Работа с мастером Data Form
Ссылки на внешние библиотеки
Ввод кода с помощью CodeInsight
Окна Locals, Autos и Watch
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Обработка ошибок при обновлении базы данных. Регион сайта: Москва и Санкт-Петербург