| При выполнении в лабораторной работе упражнения №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 Создайте новый проект
    типа Windows Forms Application  с именем FormsADO  и решением ADO
- 
 В палитре компонентов Toolbox  откройте вкладку дата и перетащите на форму компонент OleDbDataAdapter.
     Если в настройках проекта такого компонента не окажется, то щелкните на
     вкладке Data  палитры Toolbox  правой кнопкой мыши и подключите искомый
     компонент командой Choose Items В палитре компонентов Toolbox  откройте вкладку дата и перетащите на форму компонент OleDbDataAdapter.
     Если в настройках проекта такого компонента не окажется, то щелкните на
     вкладке Data  палитры Toolbox  правой кнопкой мыши и подключите искомый
     компонент командой Choose Items
- 
 В появившемся окне
    мастера 
    настройки поставщика щелкните по кнопке New Connection  и выберите
    файл подключаемой БД Northwind.mdb  из прилагаемого к работе каталога Source В появившемся окне
    мастера 
    настройки поставщика щелкните по кнопке New Connection  и выберите
    файл подключаемой БД Northwind.mdb  из прилагаемого к работе каталога Source
После щелчка на кнопке Next оболочка выдаст сообщение с предложением скопировать присоединенный файл БД в каталог проекта
- 
 Щелкните на кнопке
  " Да " и перейдите к следующей вкладке мастера Щелкните на кнопке
  " Да " и перейдите к следующей вкладке мастера
Здесь в текстовом поле предлагается указать SQL -запрос, который поставщик данных должен выполнять по умолчанию при заполнении набора данных DataSet. Мы хотим прочитать содержимое двух столбцов CustomerID и CompanyName из таблицы Customers, поэтому либо руками, либо с помощью мастера нужно в многострочном текстовом поле интерфейса мастера заполнить команду:
- 
 Щелкните на кнопке Query Builder, в диалоговом окне Add Table  выберите
    из списка таблицу Customers  и по щелчку на кнопке Add  вкладки Tables  (потом на Close ) отметьте в интерфейсе флажки против нужных полей
    таблицы, чтобы мастер написал для них текст запроса Щелкните на кнопке Query Builder, в диалоговом окне Add Table  выберите
    из списка таблицу Customers  и по щелчку на кнопке Add  вкладки Tables  (потом на Close ) отметьте в интерфейсе флажки против нужных полей
    таблицы, чтобы мастер написал для них текст запроса
- 
 Щелкните на кнопке OK  окна Query Builder  и текст запроса будет помещен в
    поле мастера Щелкните на кнопке OK  окна Query Builder  и текст запроса будет помещен в
    поле мастера
По умолчанию мастер готов создать операторы SQL не только для выборки, но и для вставки, обновления и удаления данных.
- 
 Нам  на данном этапе
     потребуется только чтение данных и другие возможности нужно отключить щелчком
    на кнопке Advanced Options,
    сбросив ненужные флажки Нам  на данном этапе
     потребуется только чтение данных и другие возможности нужно отключить щелчком
    на кнопке Advanced Options,
    сбросив ненужные флажки
- 
 Дойдите до последней вкладки
    мастера настройки поставщика и убедитесь, что включен только режим Select  (но
  не Update, Insert, Delete) Дойдите до последней вкладки
    мастера настройки поставщика и убедитесь, что включен только режим Select  (но
  не Update, Insert, Delete)
- 
 Щелкните на кнопке Finish, чтобы завершить создание и настройку  объектов поставщика
      данных (экземпляров OleDbDataAdapter  и OleDbConnection ) и сохранить параметры в установках проекта Щелкните на кнопке Finish, чтобы завершить создание и настройку  объектов поставщика
      данных (экземпляров OleDbDataAdapter  и OleDbConnection ) и сохранить параметры в установках проекта
- 
 В панели Solution
      Explorer    откройте файл Form1.Designer.cs  и убедитесь, что мастер создал необходимый
    код с настройками поставщика, в состав которого входят экземпляры классов OleDbCommand, 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  проекта Выделите в проекте
    файл БД и через панель Properties  установите его свойство Copy
    to Output Directory в значение Copy if newer, чтобы он находился
    вместе с исполняемой сборкой в одном каталоге bin  проекта
Итак, у нас есть объект соединения с БД и объект-посредник между базой и набором данных (кэшем оперативной памяти), который должен выполнять команды SQL и управлять потоками данных. Теперь нужно создать сам набор данных как экземпляр класса DataSet.
- 
 Щелкните правой кнопкой
    мыши на экземпляре oleDbDataAdapter1  в нижней части рабочей области
    и выполните команду Generate DataSet  (то же самое можно выполнить
    через меню Data  оболочки) Щелкните правой кнопкой
    мыши на экземпляре oleDbDataAdapter1  в нижней части рабочей области
    и выполните команду Generate DataSet  (то же самое можно выполнить
    через меню Data  оболочки)
- 
 В появившемся окне
    мастера Generate DataSet  щелкните на кнопке OK В появившемся окне
    мастера Generate DataSet  щелкните на кнопке OK
Будет создан объект набора данных dataSet11, который будет загружать два столбца таблицы Customers согласно SQL-запроса, указанного в настройках поставщика oleDbDataAdapter1.
В качестве элемента, отображающего набор данных объекта dataSet11, применим список ListBox.
- 
 Поместите на форму
    из вкладки Common Controls  палитры компонентов экземпляр компонента ListBox  и настройте его в соответствии с таблицей Поместите на форму
    из вкладки Common Controls  палитры компонентов экземпляр компонента ListBox  и настройте его в соответствии с таблицей
| Свойство | Значение | 
|---|---|
| ( Name ) | listBox | 
| DataSource | dataSet11 | 
| DisplayMember | Customers.CompanyName | 
| Dock | Fill | 
Хотя набор данных dataSet11 правильно связан со свойствами элемента управления ListBox, но если выполнить приложение, то список останется пустым, потому, что набор данных не был заполнен данными. Код заполнения поместим в обработчик события Load формы.
- 
 В панели Properties     выделите форму из раскрывающегося списка (или щелкните на заголовке формы)
    и в режиме Events  создайте обработчик события 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 Запустите приложение
    и вы увидите данные поля Customers.CompanyName, связанного со свойством DisplayMember     списка ListBox,
    подключенного к набору данных dataSet11  через свойство DataSource
 
                             












