Проверка введенных данных в форме, связанной с данными
В программировании баз данных проверка введенных данных (validation) гарантирует, что эти данные отвечают правилам, определенным при проектировании приложения. Эти правила называются правилами проверки данных (validation rules). Один из способов проверки данных при программировании приложения на основе Windows Forms состоит в написании кода для события RowUpdating объекта DataAdapter. Событие RowUpdating возникает как раз перед обновлением записи, а событие Row-Updated — сразу после обновления записи. Размещая код проверки введенных данных в событие RowUpdating, можно быть уверенным в том, что будут обрабатываться любые изменения данных в любой части приложения.
Ключевым фактором эффективного использования события RowUpdating является использование свойств и методов аргумента события, который представлен в виде экземпляра объекта System.Data.SqlClient.SqlClient.SqlRowUpdatingEventArgs.
Кроме проверки команды обновления записи (с помощью свойства Command объекта), можно проинформировать адаптер данных DataAdapter об отказе от обновления и откате внесенных изменений. В листинге 1.4 этот подход иллюстрирует рассмотренный ранее пример приложения для просмотра данных.
>Private Sub SqlDataAdapter1_RowUpdating(ByVal sender As Object, _
> ByVal e As System.Data.SqlClient.SqlRowUpdatingEventArgs) _
> Handles SqlDataAdapter1.RowUpdating
> If e.Row.Item("FirstName") = "" Or e.Row.Item("LastName") = "" Then
> MsgBox("Change not saved; customer must have a first and last name.")
> e.Status = UpdateStatus.SkipCurrentRow
> e.Row.RejectChanges()
> End If
>End Sub
Передача значения UpdateStatus.SkipCurrentRow свойству Status аргумента события позволяет сообщить адаптеру данных о прекращении операции, т.е. отмене обновления данных, потому что оно не прошло проверку. Но недостаточно просто прекратить выполнение операции, потому что в этом случае пользователь получит пустое текстовое поле (и пустое поле в объекте DataSet). Для решения этой проблемы следует вызвать метод RejectChanges объекта Row, который содержится в аргументе события. Он обновит содержимое пользовательского интерфейса и сообщит объекту DataSet о том, что больше не нужно согласовывать эту строку с базой данных. После этого можно продолжать редактирование данных, не беспокоясь об их безопасности.
Проверка введенных данных на уровне процессора баз данных
Помимо проверки данных во время ввода информации, следует знать о том, что можно также выполнять проверку и на уровне процессора баз данных. Такая проверка обычно более надежна, поскольку применяется независимо от причины изменения данных. При этом вам не нужно заботиться о реализации правил проверки введенных данных в каждом приложении, которое получает доступ к какой-нибудь таблице. Однако проверка введенных данных на уровне процессора баз данных отличается меньшей гибкостью, поскольку его практически невозможно переопределить, и часто имеет примитивную форму (обычно ограничивается тем, что не допускает ввод в поля пустых значений). Кроме того, проверку введенных данных на уровне процессора баз данных можно выполнять только на уровне поля, и вы не сможете сделать так, чтобы правила проверки введенных данных, реализуемые процессором баз данных, были основаны на сравнении значений двух полей (если только проверка не реализована на основе ограничения первичный/внешний ключ или реализована в серверной процедуре в виде триггера).