Передача изменений в базу данных через TableAdapter
Отдельно необходимо остановиться на методах передачи изменений обратно в базу данных. VS .Net 2005 умеет генерировать код запросов для методов insert, update, delete. В некоторых случаях этого может оказаться достаточно, но, как показывает опыт, полученные SQL-выражения пытаются претендовать на универсальность и поэтому не оптимальны, а порой не работоспособны.
Приведу пример: В поставке с Firebird идет база данных employee.fdb. В ней есть таблица SALES. Прежде всего, обращаю внимание на поле AGED, которое доступно только для чтения, т.к. вычисляется с помощью выражения
COMPUTED BY (ship_date - order_date)
Если указать для Select Command текст:
SELECT * FROM SALES
то колонка AGED будет добавлена во все команды обновления. При попытке передать изменения в базу, будет сгенерировано исключение. Необходимо вручную отредактировать текст запросов для insert, update, delete команд и убрать из обновления данную колонку.
Отредактировать SQL выражения можно, вызвав команду «Edit Queries in DataSet designer»:
Откроется дизайнер DataSet, в котором необходимо выбрать нужный TableAdapter (в данном случае это SALESTTableAdapter):
В списке свойств появятся необходимые нам объекты OleDbCommand:
Читатель может подумать, что данный случай - исключение, но это не так. Если вы выберете такой способ создания слоя доступа к данным (Data Access Layer), то будьте готовы постоянно вмешиваться в автоматический процесс генерации SQL запросов.