Опубликован: 05.08.2010 | Доступ: свободный | Студентов: 2010 / 47 | Оценка: 4.50 / 4.40 | Длительность: 60:26:00
Самостоятельная работа 4:

Разработка приложений ADO.NET для OLE DB

Применение нескольких поставщиков и нескольких наборов данных

В данном разделе мы продолжим развитие проекта и добавим еще по одному дополнительному экземпляру классов OleDbDataAdapter и DataSet. Для них мы сформируем SQL-команду, которая будет выбирать из источника одну запись таблицы Customers (клиенты), соответствующую выделенному в списке ListBox конкретному клиенту по его идентификатору. Значения полей этой записи будем отображать в текстовых полях формы, маркерованных именами столбцов таблицы. Структура таблицы Customers файловой БД Northwind.mdb, открытая в Microsoft Office Access 2003, приведена на снимке

Добавление и настройка поставщика данных

  • Перейдите в режим View Designer и поместите на форму еще один компонент OleDbDataAdapter с автоматически сгенерированным именем oleDbDataAdapter2
  • В мастере настроек адаптера Data Adapter Configuration Wizard перейдите на вкладку Generate the SQL statements, щелкните на кнопке Advanced Options и сбросьте все флажки вкладки Advanced Options, поскольку поставщик будет только читать данные
  • Щелкните на кнопке Query Builder построителя SQL-запроса, в появившемся окне выберите таблицу Customers и щелкните один раз на кнопке Add, а затем - Close
  • В появившемся списке полей таблицы Customers отметьте флажки против каждого поля, из которых должен читать данные БД настраиваемый адаптер данных
  • В поле Filter строки CustomerID второй секции построителя команд введите =?, после чего в третьей секции будет сгенерирована команда
SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, 
City, Region, PostalCode, Country, Phone, Fax
FROM  Customers
WHERE (CustomerID = ?)

показанная на снимке

  • Завершите построение запроса кнопкой OK и указанная команда окажется на текущей вкладке мастера настройки поставщика данных, который по ней будет заполнять будущий набор данных класса DataSet


  • Дойдите до последней вкладки мастера настройки поставщика и убедитесь, что включен только режим Select (но не Update, Insert, Delete )


  • Щелчком на кнопке Finish завершите настройку поставщика данных и обратите внимание, что в нижней части появился объект строки соединения для текущего адаптера

Теперь нужно создать связанный с поставщиком объект набора данных DataSet, который будет хранить данные таблицы Customers. Этот набор данных должен быть согласован по структуре с настройками поставщика, поэтому создадим его с помощью мастера. В панели Solution Explorer обратите внимание, что пока в приложении присутствует только один узел DataSet1.xsd, который был создан мастером на предыдущих этапах выполнения работы и который описывает класс набора данных, соответствующий хранению значений только двух полей таблицы Customers. Сейчас создадим еще один такой узел.

  • Щелкните правой кнопкой мыши на объекте oleDbDataAdapter2, выполните команду Generate DataSet контекстного меню (или в Data главного меню проекта) и настройте одноименное окно мастера как показано на снимке


После щелчка на кнопке OK будет создан объект набора данных, согласованный с объектом oleDbDataAdapter2 второго поставщика данных, в обязанность которого входит поставка данных в соответствии со строкой запроса.

Изменение пользовательского интерфейса формы

Сейчас нужно изменить пользовательский интерфейс формы, разместив в клиентской области справа от списка элементы Label и TextBox с целью просмотра значений полей таблицы Customers для выделенной в списке записи.

  • Измените свойство Dock списка на значение None и оформите интерфейс формы в соответствии с рисунком

На форму было помещено 11 элементов Label и 11 элементов TextBox. У текстовых меток Label в свойство текст были скопированы названия полей таблицы Customers из SQL-команды Select, приведенной выше. Свойство AutoSize элементов Label было установлено в false, а свойство TextAlign - в значение MiddleRight. После выравнивания элементов на форме с помощью панели инструментов Layout они были выделены и зафиксированы командой Format/Lock Controls, чтобы случайно не нарушить пользовательский интерфейс формы. Такого же самого эффекта можно достигнуть, если установить свойство Locked всех элементов в значение true.

Здесь необязательно, но для ручного программирования было бы удобнее, присвоить объектам текстовых полей осмысленные имена, поэтому, если хотите, выполните следующее действие:

  • Выделите последовательно все добавленные элементы TextBox и присвойте им значение свойства (Name) равное именам столбцов таблицы Customers с префиксом txt, например, первый элемент будет txtCustomerID, второй - txtCompanyName, и т.д.
Алексей Бабушкин
Алексей Бабушкин

При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Microsoft.Xna.Framework.Graphics;

   

namespace Application1

{

    public partial class MainForm : Form

    {

        // Объявим поле графического устройства для видимости в методах

        GraphicsDevice device;

   

        public MainForm()

        {

            InitializeComponent();

   

            // Подпишемся на событие Load формы

            this.Load += new EventHandler(MainForm_Load);

   

            // Попишемся на событие FormClosed формы

            this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed);

        }

   

        void MainForm_FormClosed(object sender, FormClosedEventArgs e)

        {

            //  Удаляем (освобождаем) устройство

            device.Dispose();

            // На всякий случай присваиваем ссылке на устройство значение null

            device = null;       

        }

   

        void MainForm_Load(object sender, EventArgs e)

        {

            // Создаем объект представления для настройки графического устройства

            PresentationParameters presentParams = new PresentationParameters();

            // Настраиваем объект представления через его свойства

            presentParams.IsFullScreen = false; // Включаем оконный режим

            presentParams.BackBufferCount = 1;  // Включаем задний буфер

                                                // для двойной буферизации

            // Переключение переднего и заднего буферов

            // должно осуществляться с максимальной эффективностью

            presentParams.SwapEffect = SwapEffect.Discard;

            // Устанавливаем размеры заднего буфера по клиентской области окна формы

            presentParams.BackBufferWidth = this.ClientSize.Width;

            presentParams.BackBufferHeight = this.ClientSize.Height;

   

            // Создадим графическое устройство с заданными настройками

            device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware,

                this.Handle, presentParams);

        }

   

        protected override void OnPaint(PaintEventArgs e)

        {

            device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);

   

            base.OnPaint(e);

        }

    }

}

Выбрасывается исключение:

Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл.

Делаю все пунктуально. В чем может быть проблема?