Обратите внимание, что в листинге 6.2 возвращаемое значение метода Fill уже не сохраняется в локальной переменной rows. Совсем необязательно сохранять возвращаемое значение, если только в дальнейшем не предполагается проверять его или использовать каким-то другим способом. Предлагаемый в листинге 6.2 код можно было бы расширить несколькими командами Select для обновления объекта DataTable наиболее свежими данными (например, измененными другими пользователями) из источника данных.
Существующие в объекте DataTable значения обновляются только при вызове соответствующего метода Fill, если для объекта DataTable задан первичный ключ. По умолчанию метод Fill вставляет в объект DataTable информацию о структуре данных и значения данных в записях без указания каких-либо ограничений, которые могут быть заданы в источнике данных. Для правильной установки значения свойства PrimaryKey (чтобы корректно выполнялись операции обновления данных и метод Fill) еще до вызова метода Fill нужно выполнить одно из следующих действий:
• вызвать метод FillSchema объекта DataAdapter;
• указать значение AddWithKey для свойства объекта DataAdapter;
• явно указать значение свойства PrimaryKey для соответствующих полей, если они известны в режиме создания приложения.
Обновление источника данных
Обычно после внесения всех необходимых изменений в таблицы набора данных DataSet потребуется сохранить эти изменения в источнике данных. Для этого нужно вызвать метод Update объекта DataAdapter, который анализирует изменения в указанной таблице набора данных (или сразу во всех таблицах, если ни одна из них не указана явно). Для каждой измененной записи по отношению к источнику данных выполняется команда вставки, обновления или удаления с помощью соответствующего объекта InsertCommand, UpdateCommand или DeleteCommand.
Возможность прямого указания специализированных пользовательских команд SQL или хранимых процедур в целях их автоматического применения для обновления источника данных при изменении данных
Каждая измененная запись обновляется отдельно, а не как часть транзакции или пакетной операции. Причем порядок обновления записей определяется порядком их расположения в объекте DataTable.
Для явного управления порядком выполнения операций для заданной таблицы можно использовать методы GetChanges или Select, которые доступны на уровне либо объекта DataSet,