При выполнении в лабораторной работе упражнения №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" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Разработка приложений ADO.NET для OLE DB
Все необходимые для выполнения данной работы программы можно найти в прилагаемом каталоге.
В этой работе мы последовательно познакомимся с технологией ADO.NET (ActiveX Data Objects) управления базами данных типа OLE DB (Object Linking and Embedding Database), к которым, в частности, относятся и базы файлового типа Microsoft Access с расширением .mdb. Наш выбор основан на том, что не требуется устанавливать дополнительные программы, типа SQL Server, для такого рода баз. Пока мы будем пользоваться готовой учебной базой данных Northwind.mdb, расположенной в прилагаемом к работе каталоге Source. Позднее мы научимся создавать свои базы данных либо с помощью СУБД Microsoft Office Access, либо с помощью COM объектов в оболочке Visual Studio 2008.
Создание базы данных начинается с ее проектирования с помощью диаграмм. Затем создается сам файл (или несколько взаимосвязанных файлов) БД и устанавливается структура БД, определяющая таблицы, поля и их типы, назначение ключей и индексов. Затем проектируется приложение, управляющее данными БД. Мы займемся разработкой приложения, решающего типовые задачи по редактированию и представлению данных БД.
Базы данных называют источниками данных. Microsoft ADO.NET - это часть библиотеки .NET Framework, позволяющая создавать приложения для управления данными в структурированных файловых или серверных хранилищах. Библиотечные средства ADO.NET обеспечивают подключение к источникам данных, выполнение команд SQL, обработку и выборку данных.
ADO.NET представлено набором программных средств, прежде всего классов, которые находятся в библиотечной сборке System.Data.dll. Применительно к формату OLE DB наиболее важными из них являются специализированные классы пространства имен System.Data.OleDb:
- OleDbConnection - обоспечивает подключение к источнику данных
- OleDbDataAdapter - обеспечивает связь между источником данных и набором данных в оперативной памяти
- OleDbCommand - объект команд SQL для работы в источнике данных
В совокупности экземпляры этих классов в приложении называются поставщиком данных (Data Provider). Далее идет независимый от формата БД слой для хранения данных в кэше оперативной памяти и просмотра данных из пространства имен System.Data:
- DataSet - набор кэшированных данных, выборочно загруженных из источника
- DataView - позволяет создать несколько представлений одной и той же таблицы
Упражнение 1. Связывание данных с элементами управления ListBox и TextBox
Начнем с подготовительных действий и созданию связанного с данными списка, дающего возможность только просматривать данные БД.
- Создайте новый проект типа Windows Forms Application с именем FormsADO и решением ADO
- В палитре компонентов Toolbox откройте вкладку дата и перетащите на форму компонент OleDbDataAdapter. Если в настройках проекта такого компонента не окажется, то щелкните на вкладке Data палитры Toolbox правой кнопкой мыши и подключите искомый компонент командой Choose Items
- В появившемся окне мастера настройки поставщика щелкните по кнопке New Connection и выберите файл подключаемой БД Northwind.mdb из прилагаемого к работе каталога Source
После щелчка на кнопке Next оболочка выдаст сообщение с предложением скопировать присоединенный файл БД в каталог проекта
- Щелкните на кнопке " Да " и перейдите к следующей вкладке мастера
Здесь в текстовом поле предлагается указать SQL -запрос, который поставщик данных должен выполнять по умолчанию при заполнении набора данных DataSet. Мы хотим прочитать содержимое двух столбцов CustomerID и CompanyName из таблицы Customers, поэтому либо руками, либо с помощью мастера нужно в многострочном текстовом поле интерфейса мастера заполнить команду:
- Щелкните на кнопке Query Builder, в диалоговом окне Add Table выберите из списка таблицу Customers и по щелчку на кнопке Add вкладки Tables (потом на Close ) отметьте в интерфейсе флажки против нужных полей таблицы, чтобы мастер написал для них текст запроса
- Щелкните на кнопке OK окна Query Builder и текст запроса будет помещен в поле мастера
По умолчанию мастер готов создать операторы SQL не только для выборки, но и для вставки, обновления и удаления данных.
- Нам на данном этапе потребуется только чтение данных и другие возможности нужно отключить щелчком на кнопке Advanced Options, сбросив ненужные флажки
- Дойдите до последней вкладки мастера настройки поставщика и убедитесь, что включен только режим Select (но не Update, Insert, Delete)
- Щелкните на кнопке Finish, чтобы завершить создание и настройку объектов поставщика данных (экземпляров OleDbDataAdapter и OleDbConnection ) и сохранить параметры в установках проекта
- В панели Solution Explorer откройте файл Form1.Designer.cs и убедитесь, что мастер создал необходимый код с настройками поставщика, в состав которого входят экземпляры классов OleDbCommand, OleDbDataAdapter и OleDbConnection
Описанную процедуру можно в любом месте прервать щелчком на кнопке Cancel мастера настроек и вернуться к ней в любое время. Для этого достаточно щелкнуть в нижней части рабочей области на экземпляре класса OleDbDataAdapter правой кнопкой мыши и выполнитиь команду Configure Data Adapter (или выделить объект поставщика и выполнить ту же команду через пункт Data главного меню оболочки)
- Выделите в проекте файл БД и через панель Properties установите его свойство Copy to Output Directory в значение Copy if newer, чтобы он находился вместе с исполняемой сборкой в одном каталоге bin проекта
Итак, у нас есть объект соединения с БД и объект-посредник между базой и набором данных (кэшем оперативной памяти), который должен выполнять команды SQL и управлять потоками данных. Теперь нужно создать сам набор данных как экземпляр класса DataSet.
- Щелкните правой кнопкой мыши на экземпляре oleDbDataAdapter1 в нижней части рабочей области и выполните команду Generate DataSet (то же самое можно выполнить через меню Data оболочки)
- В появившемся окне мастера Generate DataSet щелкните на кнопке OK
Будет создан объект набора данных dataSet11, который будет загружать два столбца таблицы Customers согласно SQL-запроса, указанного в настройках поставщика oleDbDataAdapter1.
В качестве элемента, отображающего набор данных объекта dataSet11, применим список ListBox.
- Поместите на форму из вкладки Common Controls палитры компонентов экземпляр компонента ListBox и настройте его в соответствии с таблицей
Свойство | Значение |
---|---|
( Name ) | listBox |
DataSource | dataSet11 |
DisplayMember | Customers.CompanyName |
Dock | Fill |
Хотя набор данных dataSet11 правильно связан со свойствами элемента управления ListBox, но если выполнить приложение, то список останется пустым, потому, что набор данных не был заполнен данными. Код заполнения поместим в обработчик события Load формы.
- В панели Properties выделите форму из раскрывающегося списка (или щелкните на заголовке формы) и в режиме Events создайте обработчик события Load, который заполните так
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace FormsADO { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // Заполняем набор данных настроенным адаптером данных oleDbDataAdapter1.Fill(dataSet11); // Устанавливаем курсор списка в конец listBox.SelectedIndex = listBox.Items.Count - 1; } } }
- Запустите приложение и вы увидите данные поля Customers.CompanyName, связанного со свойством DisplayMember списка ListBox, подключенного к набору данных dataSet11 через свойство DataSource