При выполнении в лабораторной работе упражнения №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" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Опубликован: 05.08.2010 | Уровень: специалист | Доступ: свободно
Самостоятельная работа 6:
Редактирование данных OLE DB средствами ADO.NET
Упражнение 5. Работа с объектом XmlDataDocument
Объект XmlDataDocument хранит в себе данные, загруженные из БД, сразу в двух форматах: обычный набор данных DataSet и Xml-формат данных. В некоторых случаях это может быть полезным. В этом упражнении проиллюстрируем некоторые возможности объекта XmlDataDocument.
- Добавьте к приложению новый проект оконного приложения с именем WinForms5
- Скопируйте из предыдущего проекта WinForms4 в корневой узел проекта WinForms5 папку Data вместе с файловой БД Northwind.mdb. На вопрос мастера конфигурации скажите Cancel
-
В панели Solution
Explorer выделите файл БД Northwind.mdb и
в панели Properties установите для него
- Build Action=None
- Copy to Output Directory=Copy if newer
- Добавьте для корневого узла проекта WinForms5 командой Add/New Item заготовку файла конфигурации приложения с именем App.config
Иногда бывает удобно не прятать строку соединения в код приложения, а вынести ее в конфигурационный файл, чтобы при изменении условий выполнения не исправлять сам код. В этом упражнении мы и применим такой способ. При наличии множества БД можно заготовить несколько строк соединения в конфигурационном файле с разными именами, а в извлекать нужную строку по ее имени без изменения кода самого приложения.
- Заполните конфигурационный файл кодом настройки строки соединения с БД, значение которой мы будем извлекать из кода приложения во время выполнения
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="MyNorthwind" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Data\Northwind.mdb" providerName="System.Data.OleDb" /> </connectionStrings> </configuration>
- Выделите корневой узел проекта WinForms5 и командой Project/Add Reference добавьте к проекту библиотечную сборку System.configuration.dll, в которой находится нужный нам класс ConfigurationManager для работы с конфигурационным файлом
- Выделите корневой узел проекта WinForms5 и командой Project/WinForms5 Properties установите для вкладки Application список Output type в значение Console Application, чтобы иметь возможность просматривать информацию стандартного потока вывода
- Заполните файл Form1.cs проекта WinForms5 следующим кодом
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; // Дополнительные пространства имен using System.Data.OleDb; using System.Data.Common; using System.Xml; using System.IO; namespace WinForms5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); SetInterface(); Load(); } WebBrowser browser; DataGridView dataGridView; void SetInterface() { this.Text = "Упражнение 5"; // Создаем сплиттер SplitContainer split = new SplitContainer(); split.Orientation = Orientation.Horizontal; split.Dock = DockStyle.Fill; split.Parent = this; // Создаем элементы отображения dataGridView = new DataGridView(); dataGridView.Dock = DockStyle.Fill; dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView.RowHeadersWidth = 25;// Служебный столбец dataGridView.Parent = split.Panel1; browser = new WebBrowser(); browser.Dock = DockStyle.Fill; browser.Parent = split.Panel2; } DataSet LoadDataSet() { // Извлекаем строку соединения из файла App.config String connectStr = System.Configuration. ConfigurationManager.ConnectionStrings["MyNorthwind"].ConnectionString; DataSet ds = new DataSet(); // Заполняем множественный набор данных из БД using (OleDbConnection conn = new OleDbConnection(connectStr)) { OleDbCommand selectCommand = conn.CreateCommand();// Команда получила соединение OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand); // Загружает данные и схему первой таблицы selectCommand.CommandText = "SELECT EmployeeID, " + "(LastName + ', ' + FirstName) AS FullName, " + "Address, BirthDate, Region FROM Employees"; adapter.Fill(ds); } return ds; } XmlDataDocument document; String path; new void Load() { // Определяем полный путь к хранилищу данных path = Application.StartupPath.ToString() + @"\Data\"; // Создаем Xml-документ и загружаем его данными document = new XmlDataDocument(LoadDataSet()); // Связываем с сеткой для отображения dataGridView.DataSource = document.DataSet;// Только для чтения dataGridView.DataMember = "Table";// Дежурное имя, когда не задано явно // Все тонкие ссылки можно объявить типом // ближайшего абстрактного предка (просто так!) TextWriter tw = new StringWriter();// Создали поток записи document.Save(tw); ;// Сохраняем документ в потоке document.Save(path + "XmlDataDocument.xml");// Сохранили в файле // Выводим в консольное окно TextReader tr = new StringReader(tw.ToString());// Создали поток чтения String str = tr.ToString();// Если ничего нет, то будет null while (str != null) { str = tr.ReadLine(); Console.WriteLine(str); } browser.Navigate(path + "XmlDataDocument.xml"); // Регистрируем обработчик события редактирования строки document.DataSet.Tables[0].RowChanged += new DataRowChangeEventHandler(Form1_RowChanged); } void Form1_RowChanged(object sender, DataRowChangeEventArgs e) { document.Save(path + "XmlDataDocument.xml"); browser.Navigate(path + "XmlDataDocument.xml"); } } }
- Разберитесь с кодом упражнения, запустите проект и удостоверьтесь, что редактирование строк в формате DataSet немедленно отражается и в Xml-представлении с помощью объекта XmlDataDocument. Хотя здесь мы и не сохраняем изменения в самой БД