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

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

Компонент PrintDocument
Редактор типов файлов
Специальные возможности и логотип «Certified for Windows»
Окна Locals, Autos и Watch
Установка сборок в виде компилированных образов
CBitmapEx – C++-класс для работы с BMP
Применение XML с объектами DataSet
Получение и установка текущей культуры пользовательского интерфейса
Загрузка элемента управления в Internet Explorer
Отображение текста
Работа с классом Help
Константы и перечисления
Декларативная защита, основанная на ролях
Защита приложений
Отладка элементов управления
| .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 31


     



Rambler's Top100

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

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