Для определения свойств InsertCommand, UpdateCommand (Команда обновления) и DeleteCommand можно использовать класс SqlCommandBuilder. Но из-за того, что для динамического определения этих свойств класс SqlCommandBuilder должен получить нужную информацию, его использование повлечет за собой необходимость произвести несколько дополнительных обращений к базе данных и уменьшение производительности. Поэтому, если структура базы данных, используемой приложением, известна при его разработке, лучше определять свойства InsertCommand, UpdateCommand (Команда обновления) и DeleteCommand явно. Это поможет избежать снижения производительности. Если же структура базы данных точно не известна, но пользователь определил запрос, то SqlCommandBuilder можно использовать для обновления результатов "при последующих запросах.
Этот метод действенен для экземпляров DataSet (Набор данных), соответствующих единичной таблице. Если же данные в наборе данных — результат запроса, использовавшего соединение данных, или между таблицами в наборе данных есть связи, то механизм автоматической генерации не сможет корректно определить команду, обновляющую данные в обеих таблицах. Так как SqlCommandBuilder использует при генерации команд свойство SelectCommand, оно должно быть определено.
Для того чтобы описанный метод работал корректно, в таблице, содержащейся в наборе данных, должен быть главный или единственный столбец. Этот столбец будет результатом выполнения SQL-запроса, установленного в свойстве SelectCommand. Главный столбец используется при обновлении или удалении данных как where-фраза.
Имена столбцов не должны содержать специальных символов, таких, как пробелы, запятые, точки, кавычки или другие символы, отличные от буквенно-цифровых. Это обязательно даже тогда, когда имя взято в скобки. Имя таблицы можно задавать полностью, как, например, SchemaName . OwnerName . TableName.
Простейший способ использования класса SqlCommandBuilder— передача экземпляра класса SqlDataAdapter конструктору SqlCommandBuilder в качестве аргумента. После этого объект SqlCommandBuilder зарегистрирует себя в качестве обработчика события RowUpdating. А дальше он сможет генерировать необходимые команды InsertCommand, UpdateCommand (Команда обновления) и DeleteCoramand до обновления строки.