Генерирование SQL-команд с помощью типов построителя команд
Генерирование SQL-команд с помощью типов построителя команд
Вы должны согласиться с тем, что для работы с адаптерами данных может потребоваться ввод довольно большого объема программного кода, а также создание всех четырех объектов команд и соответствующей строки соединения (или DbConnection-объекта). Чтобы упростить дело, в .NET 2.0 каждый из поставщиков данных ADO.NET предлагает тип построителя команд. Используя этот тип, вы можете автоматически получать объекты команд, содержащие правильные типы команд Insert, Delete и Update на базе исходного оператора Select.
Тип SqlCommandBuilder автоматически генерирует значения для свойств InsertCommand, UpdateCommand и DeleteCommand объекта SqlDataAdapter на основе значения SelectCommand. Очевидным преимуществом здесь является то, что исключается необходимость строить все типы SqlCommand и SqlParameter вручную.
Здесь возникает вопрос о том, как построитель команд может строить указанные объекты SQL-команд "на лету". Оказывается, все дело в метаданных. В среде выполнения, когда вы вызываете метод Update() адаптера данных, соответствующий построитель команд читает данные структуры базы данных для автоматического генерирования объектов соответствующих команд вставки, удаления и обновления данных.
Рассмотрите следующий пример, в котором строка из DataSet удаляется с помощью автоматически сгенерированных SQL-операторов. Кроме того, для каждого объекта команды соответствующая команда выводится на печать.
static void Main(string[] args) {
DataSet theCarsInventory = new DataSet();
// Создание соединения.
SqlConnection cn = new SqlConnection("server=(local);User ID=sa;Pwd=;database=Cars");
// Автоматическое генерирование команд Insert, Update и Delete
// на основе существующей команды Select.
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Inventory", cn);
SqlCommandBuilder invBuilder = new SqlCommandBuilder(da);
// Заполнение DataSet.
da.Fill(theCarsInventory, "Inventory");
PrintDataSet(theCarsInventory);
// Удаление строки на основании пользовательского ввода
// и обновление базы данных.
try {
Console.Write("Номер строки для удаления: ");
int rowToDelete = int.Parse(Console.ReadLine());
theCarsInventory.Tables["Inventory"].Rows[rowToDelete].Delete();
da.Update(theCarsInventory, "Inventory");
} catch (Exception e) {
Console.WriteLine(e.Message);
}
// Новое заполнение и печать таблицы Inventory.
theCarsInventory = new DataSet();
da.Fill(theCarsInventory, "Inventory");
PrintDataSet(theCarsInventory);
}
В этим фрагменте программного кода обратите внимание на то, что здесь объект построителя команд (в данном случае это SqlCommandBuilder) передается объекту адаптера данных в виде параметра конструктора и больше никак не используется. Как бы странно это ни выглядело, но это все, что вам требуется сделать (в минимальных условиях). Указанный тип в фоновом режиме сконфигурирует для адаптера данных остальные объекты команд.
Хотя идея получить кое-что, не предлагая ничего взамен, понравится многим, важно понять, что построители команд имеют некоторые (весьма важные) ограничения. В частности, построитель команд может автоматически генерировать SQL-команды для адаптера данных только в том случае, когда выполнены все следующие условия.
• Соответствующая команда Select взаимодействует только с одной таблицей (так что, например, соединения таблиц не допускаются).
• Для этой единственной таблицы назначен первичный ключ.
• Столбцы, представляющие первичный ключ, присутствуют в данном SQL-операторе Select.
Так или иначе, рис. 22.19 демонстрирует, что указанная строка удаляется из физической базы данных (при анализе программного кода этого примера следует различать значение CarID и порядковый номер строки).

Рис. 22.19. Использование автоматически генерируемых команд SQL
Исходный код. Проект MySqlCommandBuilder размещен в подкаталоге, соответствующем главе 22.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Форматы команд MI
Форматы команд MI Рисунок 4.8 Формат команд MIНа рисунке 4.8 показан формат команд ОРМ MI в потоке команд. Команда состоит из кода операции, необязательного расширения кода операции, а также нуля или более операндов. MI проектировался в расчете на последующие расширения, так
5.7.4 Подстановка команд
5.7.4 Подстановка команд Подстановка команд является очень мощным инструментов bash. Она заключается в замене имени команды на результат ее выполнения. Существует две формы подстановки команд:$(command) и `command`Если применяется вторая из этих форм, то обратный слэш внутри кавычек
Исполнение команд
Исполнение команд Общий синтаксис операций с CVS выглядит так:> cvs [cvs-options] command [command-options-and-arguments] ПРИМЕЧАНИЕ. Угловой скобкой в начале строки «>» я буду отмечать текст, набираемый в командной строке. Текст без угловой скобки, следующий за командой, является предполагаемым
Запись команд
Запись команд После начала записи вам не придется предпринимать никаких специальных действий, чтобы записать нужные вам команды в макрос. Нужно просто использовать команды приложения самым обычным способом. Все, что вы будете делать,- и выбор команд из меню, и
2.1. Выполнение SQL-команд
2.1. Выполнение SQL-команд Прежде чем выполнять SQL-команды, необходимо подключиться к работающему серверу MySQL (как это сделать, рассказывалось в главе 1). В этом разделе вы узнаете, как создавать SQL-команды и передавать их серверу для выполнения.Если вы используете командную
Изменение содержимого таблиц с помощью объектов команд
Изменение содержимого таблиц с помощью объектов команд Вы только что убедились, что метод ExecuteReader() извлекает объект чтения данных, позволяющий проверить результаты выполнения SQL-оператора Select в однонаправленном и доступном только для чтения потоке. Но если вы хотите
Пример 10-6. Создание списка аргументов в цикле for с помощью операции подстановки команд
Пример 10-6. Создание списка аргументов в цикле for с помощью операции подстановки команд #!/bin/bash# уЩЫЬ for гЯ [гаЩгЫЯЭ], гЯкФСЮЮйЭ г аЯЭЯниР аЯФгдСЮЯзЫЩ ЫЯЭСЮФ.NUMBERS="9 7 3 8 37.53"for number in `echo $NUMBERS` # for number in 9 7 3 8 37.53do echo -n "$number "doneecho exit 0Более сложный пример использования подстановки
3.2.1. Запуск команд и сценариев с помощью команды at
3.2.1. Запуск команд и сценариев с помощью команды at Текст задания можно передать команде at двумя способами: в файле или в режиме командной строки at. Если задание состоит из одной команды или двух — трех команд, объединенных каналом, то удобнее воспользоваться вторым
10.2.2. Синтаксис команд
10.2.2. Синтаксис команд Общий синтаксис команд редактора sed таков:[адрес1 [, адрес2] ] [ ! ] команда [аргументы]Команда состоит из одной буквы или одного символа (Список основных команд представлен ниже). Аргументы требуются лишь нескольким командам, в частности, команде s.
11.1.14. Обработка результатов сортировки с помощью команд head и tail
11.1.14. Обработка результатов сортировки с помощью команд head и tail При работе с большими файлами не обязательно выводить на экран весь файл, если требуется просмотреть только его начало и конец. Существуют удобные команды head и tail, упрощающие подобную задачу. Команда head
18.8. Управление ходом выполнения циклов с помощью команд break и continue
18.8. Управление ходом выполнения циклов с помощью команд break и continue Иногда в процессе работы возникает необходимость в прерывании или пропуске отдельных итераций цикла. При этом применяются определенные критерии. Для обеспечения подобных возможностей интерпретатор shell
Переадресация команд: применение переадресации команд для непосредственного выполнения скриптов и каналов
Переадресация команд: применение переадресации команд для непосредственного выполнения скриптов и каналов Переадресация (перенаправление) команд – одна из наиболее полезных возможностей протокола SSH. Она вытекает из его основополагающих принципов построения, когда