Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Ошибки при обновлении наборов данных

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

Ведение записей об изменениях

Ведение записей об изменениях в наборе данных ведется двумя методами: маркировкой строки, показывающей, были ли в строку внесены изменения (RowState), а также созданием множества копий записи (DataRowVersion). Используя эти сведения, процессы могут определять, какие изменения были внесены в набор данных, и отправлять соответствующие обновления в источник данных.

Свойство RowState

Свойство RowStateобъектаDataRowявляется значением, которое предоставляет сведения о состоянии конкретной строки данных.

В следующей таблице подробно описаны возможные значения перечисления DataRowState.

Значение DataRowState

Описание

Added

Строка была добавлена в качестве элемента в DataRowCollection. (В этом состоянии строка не имеет соответствующей исходной версии, так как она еще не существовала, когда был вызван последний методAcceptChanges.)

Deleted

Строка была удалена с помощью метода DeleteобъектаDataRow.

Detached

Строка была создана, но не является частью какой-либо DataRowCollection. ОбъектDataRowнаходится в этом состоянии сразу после создания и до его добавления в коллекцию, или после удаления его из коллекции.

Modified

В значение столбца в строке было внесено какое-то изменение.

Unchanged

Строка не была изменена с момента последнего вызова AcceptChanges.

Перечисление DataRowVersion

Наборы данных поддерживают несколько версий записей. Перечисление DataRowVersionобъектаDataRowпредставляет собой значение, которое может использоваться для возврата определенной версии объектаDataRow.

В следующей таблице подробно описаны возможные значения перечисления DataRowVersion.

Значение DataRowVersion

Описание

Current

Текущая версия записи содержит все изменения записи с момента последнего вызова AcceptChanges. Если строка была удалена, текущей версии нет.

Default

Значение записи по умолчанию, определяемое схемой набора данных или источником данных.

Original

Исходная версия записи является копией записи, сделанной в момент последнего внесения изменений в набор данных. Фактически это версия записи, считанная из источника данных.

Proposed

Предлагаемая версия записи доступна временно, пока не завершено обновление, т. е. между вызовами методов BeginEditиEndEdit. Обычно к предлагаемой версии записи обращаются в обработчике события, такого какRowChanging. Вызов методаCancelEditвозвращает изменения и удаляет предлагаемую версию строки данных.

Исходная и текущая версии полезны при передаче обновленных сведений в источник данных. Как правило, когда обновление отправляется в источник данных, новые сведения для базы данных находятся в текущей версии записи. Данные из исходной версии используются для нахождения записи для обновления. Например, в случае, когда изменяется первичный ключ записи, нужно найти соответствующую запись в источнике данных и обновить изменения. Если исходной версии нет, то запись, скорее всего, добавится в источник данных, что приведет не просто к появлению нежелательной записи, но к появлению неточной и устаревшей записи. Две версии также используются при одновременном управлении; можно сравнить исходную версию с версией в источнике данных, чтобы определить, изменилась ли запись с момента ее последней загрузки в набор данных. Дополнительные сведения см. в разделе Управление одновременным доступом в ADO.NET.

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

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

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