|
При выполнении в лабораторной работе упражнения №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












