Конструктор построителя команд

b следующий код демонстрирует применение

Конструктор построителя команд берет адаптер данных и устанавливает его свойства InsertCommand, DeleteCommand И UpdateCommand Подходящими запросами, исходя из столбцов, которые заполняет SelectCommand. Следующий код демонстрирует применение построителя команд для генерации запросов обновления и использует их для сброса изменений из набора данных в базу данных. Набор данных и адаптер данных в этом коде являются элементами охватывающего класса, поскольку они используются в другом методе для заполнения набора данных посредством запроса SELECT. Для простых случаев применение SqlCommandBuilder Очень удобно. Однако он имеет ряд недостатков, и в коде программной продукции лучше отказаться от него в пользу написания своих собственных запросов SQL или использования сохраняемых процедур. Запросы, генерируемые построителем команд, всегда сравнивают значения всех столбцов, которые были извлечены запросом SELECT, чтобы обнаружить нарушения оптимистической конкуренции, что описывается в следующем разделе. Однако обычно это будет не лучшим подходом. Это также означает, что запросы несут на себе гораздо больше данных для каждого обновления, чем это может быть необходимо. Для систем большего масштаба лучшим подходом по соображениям безопасности, сопровождаемости и производительности будет работа с сохраняемыми процедурами. Более подробно см. далее в разделе «Обновление при помощи наборов данных и сохраняемых процедур». Для решения этой проблемы в ADO. NET обычным подходом является применение принципа, называемого оптимистической конкуренцией, которая по существу означает априорное предположение, что между моментом, когда вы извлекаете строку данных, и моментом, когда вы вновь обращаетесь к источнику данных, чтобы ее обновить, никакой другой запрос или клиент не модифицирует эту строку. Если это предположение нарушается, что в системе с высокой степенью параллелизма может происходить весьма часто, ваш код должен быть способен как-то с этим справиться.