Проверка данных в наборах данных

 

Опубликовано: Апрель 2016

Проверка данных представляет собой процесс подтверждения того, что значения, вводимые в объекты данных, соответствуют ограничениям в схемах наборов данных, а также правилам, установленным для приложения. Проверка данных до отправки обновлений в основную базу данных является хорошей практикой, которая уменьшает вероятность появления ошибок, а также ожидаемое количество циклов обработки между приложением и базой данных. Чтобы подтвердить, что данные, записываемые в набор данных, верны, можно выполнить проверки в самом наборе данных. Набор данных может проверить данные независимо от того, как производится обновление: напрямую, элементами управления в форме, внутри компонента или каким-либо другим способом. Поскольку набор данных является частью приложения, логично именно в нем реализовать проверку, учитывающую особенности данного приложения (в отличие от аналогичных проверок в самой базе данных).

Добавить проверки в приложение предлагается в файл частичного класса набора данных. В Visual Basic или Visual C# откройте Конструктор наборов данных и дважды щелкните столбец или таблицу, для которых необходимо создать проверку. Это действие автоматически создает обработчик событий ColumnChanging или RowChanging. Дополнительные сведения см. в разделе Практическое руководство. Проверка данных в ходе изменения столбцов или Практическое руководство. Проверка данных в ходе изменения строк. Полный пример содержится в разделе Пошаговое руководство. Добавление проверки в набор данных.

Проверка данных

Проверка в наборе данных может быть выполнена следующим образом:

Есть несколько событий, инициируемых объектом DataTable при внесении изменений в запись:

По умолчанию каждое изменение столбца инициирует четыре события: сначала события ColumnChanging и ColumnChanged для отдельного столбца, который в данный момент изменяется, а затем события RowChanging и RowChanged. Если в строку вносится несколько изменений, события будут инициироваться для каждого изменения.

Примечание

Метод BeginEdit строки данных отключает события RowChanging и RowChanged после каждого изменения отдельных столбцов. В этом случае событие не инициируется до вызова метода EndEdit, когда события RowChanging и RowChanged инициируются только один раз. Дополнительные сведения см. в разделе Практическое руководство. Отключение ограничений при заполнении набора данных.

Выбор события зависит от желаемой степени детализации проверки. Если важно перехватить ошибку непосредственно при изменении столбца, создайте проверку с помощью события ColumnChanging. В противном случае используйте событие RowChanging, которое может перехватывать сразу несколько ошибок. Кроме того, если данные структурированы таким образом, что значение одного столбца проверяется на основе содержимого другого столбца, необходимо выполнять проверку во время события RowChanging.

По окончании обновления записей объект DataTable инициирует события, на которые можно отвечать по мере того, как появляются изменения, и после того, как все изменения уже сделаны.

Если приложение использует типизированный набор данных, можно создавать строго типизированные обработчики событий. Это добавит четыре дополнительных типизированных события, для которых можно создать обработчики; dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeleting и dataTableNameRowDeleted. Эти обработчики типизированных событий передают аргумент, который включает имена столбцов пользовательской таблицы, упрощающий написание и чтение кода.

События обновления данных

Событие Описание
ColumnChanging Значение в столбце изменяется. Событие передает строку и столбец, а также предлагаемое новое значение.
ColumnChanged Значение в столбце изменено. Событие передает строку и столбец, а также предлагаемое значение.
RowChanging Изменения, внесенные в объект DataRow, будут зафиксированы в наборе данных. Если метод BeginEdit не вызывался, событие RowChanging инициируется для каждого изменения в столбце сразу после инициирования события ColumnChanging. Если же метод BeginEdit вызывался до внесения изменений, событие RowChanging инициируется только при вызове метода EndEdit.

Событие передает строку и значение, указывающее, какое действие выполняется (изменение, вставка и т. д.).
RowChanged Строка изменена. Событие передает строку и значение, указывающее, какое действие выполняется (изменение, вставка и т. д.).
RowDeleting Строка удаляется. Событие передает строку и значение, указывающее, какое действие выполняется (удаление).
RowDeleted Строка удалена. Событие передает строку и значение, указывающее, какое действие выполняется (удаление).

События ColumnChanging, RowChanging и RowDeleting вызываются во время процесса обновления. Эти события могут быть использованы для проверки данных или выполнения других операций по обработке данных. Поскольку обновления выполняются во время работы этих событий, можно отменить обновление с помощью создания исключения, что не позволит изменениям выполниться до конца.

События ColumnChanged, RowChanged и RowDeleted являются уведомляющими событиями, инициируемыми после успешного окончания обновления. Эти события очень полезны, если в дальнейшем требуется продолжать работу, используя выполненное обновление.

См. также

Создание и изменение типизированных наборов данных
Практическое руководство. Подключение к данным в базе данных
Практическое руководство. Проверка данных элемента управления DataGridView в Windows Forms
Практическое руководство. Отображение значков ошибок при проверке введенных в форму данных с помощью компонента ErrorProvider в Windows Forms