Разработка переносимого графического интерфейса пользователя для работы со встраиваемой реляционной БД на примере СУБД SQLite
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
аблиц из БД;
2)организованно представление схемы БД в виде иерархической структуры в самом приложении и её сохранение в XML-файл;
Дальнейшее развитие проекта можно увидеть в:
)увеличении функциональных возможностей по визуальному построению запросов,
2)в совершенствовании механизма и формальном описании правил представления РБД в виде иерархической модели данных (XML-файла),
)добавления полнофункциональной переносимости приложения между различными ОС, отличными от семейства ОС Windows (кроссплатформенности).
Приложение 1
Полный код приложения
using System;
using System.IO;System.Collections.Generic;System.Data;System.Linq;System.Xml;System.Xml.Linq;System.Text;System.Windows;System.Windows.Controls;System.Windows.Data;System.Windows.Documents;System.Windows.Input;System.Windows.Media;System.Windows.Media.Imaging;System.Windows.Navigation;System.Windows.Shapes;Finisar.SQLite;
SQLiteSampleProject
{partial class MainWindow : Window
{
///
/// Путь к папке с приложением.
/// appPath;
///
/// Имя файла базы данных.
/// baseName;
///
/// Запрос базе.
///
string query;
///
/// Структурированное представление бд.
/// xDoc = new XDocument();
//=======================================================================================MainWindow()
{.Initialize();();
}
//=======================================================================================
///
/// Выход по кнопке в главном меню.
/// void Bt_Exit_Click(object sender, RoutedEventArgs e)
{();
}
///
/// Активация кнопок интерфейса (к примеру, после корректной загрузки или создания базы данных).
/// void ActivateButtons()
{_Table.IsEnabled = true;_Console.IsEnabled = true;
}
///
/// Деактивация кнопок интерфейса.
/// void DeactivateButtons()
{_Table.IsEnabled = true;_Console.IsEnabled = true;
}
///
/// Событие для создания нового файла базы данных.
/// void Bt_CreateBase_Click(object sender, RoutedEventArgs e)
{
{= NewBase.GetNewBaseName(); //открываем диалоговое окно, из которого получаем имя
//для файла новой базы
(baseName != null)
{
appPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), baseName);
//проверим, не создан ли уже такой файл
if (File.Exists(appPath))(MessageBox.Show("База: \"" + appPath + "\" уже создана. Переписать?", "Внимание!", System.Windows.MessageBoxButton.YesNo).ToString()
== System.Windows.Forms.DialogResult.No.ToString())
return;
//создаем новый файл базы данных.Create(appPath);
//напишем сообщение в строку состояния_BottomBar.Items[0] = "База успешно создана: \"" + appPath + "\"";
//напишем сообщение в лог.AddInfo("Base successfully created -> \"" + appPath + "\"");
//-------------------------------------------------------------------= new XDocument(new XElement("DataBase"));.Root.SetAttributeValue("name", baseName);
.FromXDocument(Tv_BaseNavigator, xDoc);
//-------------------------------------------------------------------
//сделаем доступным интерфейс приложения();
}return;
}(Exception ex) //если произошла ошибка при создании файла базы
{.Show(ex.Message, "Ошибка при создании базы!"); //покажем на экран
"+ex.Message);//">Log.AddInfo("Error on base creating -> " + ex.Message); //и запишем в лог
}
}
///
/// Событие для открытия файла базы данных.
/// void Bt_OpenBase_Click(object sender, RoutedEventArgs e)
{
{= OpenBase.GetOpenBaseName(); //открываем диалоговое окно, из которого получаем имя
//файла базы данных, которую необходимо открыть
if (baseName != null)
{= System.IO.Path.Combine(Directory.GetCurrentDirectory(), baseName);
//напишем сообщение в строку состояния_BottomBar.Items[0] = "База успешно загружена: \"" + appPath + "\"";
//напишем сообщение в лог.AddInfo("Base successfully loaded -> \"" + appPath + "\"");
//-------------------------------------------------------------------();.FromXDocument(Tv_BaseNavigator, xDoc);
//-------------------------------------------------------------------
//сделаем доступным интерфейс приложения();
}return;
}(Exception ex) //если произошла ошибка при создании файла базы
{.Show(ex.Message, "Ошибка при загрузке базы!"); //покажем на экран
"+ex.Message);//">Log.AddInfo("Error on base loading -> " + ex.Message); //и запишем в лог
}
}
///
/// Добавление в текущую базу новой таблицы.
/// void Bt_CreateTable_Click(object sender, RoutedEventArgs e)
{
{= NewTable.GetQueryForTableCreate();
(query != null)
{
//отдаем сформированный запрос провайдеру для обработки и отсылки к базе
if (!SQLiteProvider.ExecuteNonQuery(appPath, query).HasValue)
return;
//напишем сообщение в строку состояния_BottomBar.Items[0] = "Таблица успешно создана: #" + query + "#";
//напишем сообщение в лог.AddInfo("Table successfully created -> #" + query + "#");
//-------------------------------------------------------------------();.FromXDocument(Tv_BaseNavigator, xDoc);
//-------------------------------------------------------------------
}return;
}(Exception ex) //если произошла ошибка при создании новой таблицы
{.Show(ex.Message, "Ошибка при создании таблицы!"); //покажем на экран
"+ex.Message);//">Log.AddInfo("Error on table creating -> " + ex.Message); //и запишем в лог
}
}
///
/// Строит стуктуру БД в объект.
/// void BuildXDoc()
{
{= new XDocument(new XElement("DataBase"));.Root.SetAttributeValue("name", baseName);
tablesNames=SQLiteProvider.GetTablesNames(appPath);.Root.SetAttributeValue("tablesCount",tablesNames.Count);"> tablesNames = SQLiteProvider.GetTablesNames(appPath);.Root.SetAttributeValue("tablesCount", tablesNames.Count);
(string s in tablesNames)
{xEl1 = new XElement("Table");.SetAttributeValue("name", s);
= "SELECT * FROM " + s;[] drs = SQLiteProvider.Query(appPath, query);.SetAttributeValue("columnsCount", drs[0].Table.Columns.Count);
(DataRow dr in drs)
{xEl2 = new XElement("Row");
i = 0;(object cell in dr.ItemArray)
{xEl3 = new XElement("Field");.SetAt