* При перепечатке материалов ссылка на 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

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

Managed Control Panel Items
Установка порядка передачи фокуса при нажатии клавиши Tab
Редактор типов файлов
Установка сборок в виде компилированных образов
Вложенные элементы управления и контейнеры
Создание экземпляров пользовательских типов
Оповещение пользователя об ошибках ввода
Создание перегруженных методов
Реализация членов интерфейса на Visual Basic .NET
Примеси (mixin)
Реализация свойств
Достоинства сертификации Microsoft
Классы CTS
Карринг (currying)
Настройка трассировочных переключателей
| .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


     



Rambler's Top100

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

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