Читаем Язык программирования С# 2005 и платформа .NET 2.0. полностью

Здесь возникает вопрос о том, как построитель команд может строить указанные объекты 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.

<p>Объекты DataSet с множеством таблиц и объекты DataRelation</p>

До этого момента во всех примерах данной главы объекты DataSet содержали по одному объекту DataTable. Однако вся мощь несвязного уровня ADO.NET проявляется тогда, когда DataSet содержит множество объектов DataTable. В этом случае вы можете добавить в коллекцию DataRelation объекта DataSet любое число объектов DataRelation, чтобы указать взаимные связи таблиц. Используя эти объекты, клиентское звено приложения сможет осуществлять переходы между таблицами без пересылки данных по сети.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных