Файл: Отчет по учебной практике по пм. 11 Разработка, администрирование и защита баз данных.docx
Добавлен: 07.11.2023
Просмотров: 1700
Скачиваний: 78
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Рисунок 29 Создание подключения
-
Нажимаем Ok. -
Опцию Use SQL Server change tracking оставляем включенной по умолчанию. -
В раздел Cached Tables с помощью кнопки Add добавляем таблицы, для которых мы хотим настроить локольное кэширование. Появляется окно Configure Tables for Offline Use. Значение параметра Data to download оставляем по умолчанию New and incremental changes after first synchronization. Наше приложение будет извлекать из сервера записи, которые были изменены с момента последней синхронизации. Во время первой синхронизации будет загружена вся таблица. Если выбрать значение Entire table each time, то при синхронизации локальная копия таблицы будет заменяться ее версией с сервера баз данных.
Рисунок 30 Выбор таблиц
-
Нажимаем Ок.
Рисунок 31 Настройка подключения БД
-
Нажимаем Next. Ставим галочки на названиях нужных таблиц. Запоминаем имя для DataSet. Нажимаем Finish.
Рисунок 32 Выбор нужных таблиц
-
Запускаем Visual Studio. Создаем приложение Windows Form в C#. -
Размещаем на форме компонент DataGridView. В его контекстном меню выбираем Other Data Sources.
Рисунок 33 Подключение таблицы
-
Выбираем название той таблицы, которая будет отображаться. -
Запускаем проект и видим, что таблица отобразилась в окне DataGridView.
Рисунок 34 Отображение таблицы
-
Аналогичным образом поступаем с другими таблицами. -
Разместим на форме 3 кнопки: Sync, Submit Changes и Refresh Data. -
Кнопка Refresh Data будет обновлять наши элементы DataGridView записями из локального кэша. В обработчик на нажатие этой кнопки добавим следующий код.
private void button3_Click(object sender, EventArgs e)
{
try
{
this.booksTableAdapter.Fill(this.libraryDataSet.Books);
this.catalogTableAdapter.Fill(this.libraryDataSet.Catalog);
this.readersTableAdapter.Fill(this.libraryDataSet.Readers);
this.instancesTableAdapter.Fill(this.libraryDataSet.Instances);
this.placed_in_the_catalogTableAdapter.Fill(this.libraryDataSet.Placed_in_the_catalog);
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
-
Задача кнопки Submit Changes – передавать и сохранять измененения в элементах DataGridView в наш локальный кэш приложения. На ней соответственно будет исполнятся следующий код.
private void button2_Click(object sender, EventArgs e)
{
try
{
this.Validate();
this.booksBindingSource.EndEdit();
this.catalogBindingSource.EndEdit();
this.readersBindingSource.EndEdit();
this.instancesBindingSource.EndEdit();
this.placedinthecatalogBindingSource.EndEdit();
this.booksTableAdapter.Update(this.libraryDataSet.Books);
this.catalogTableAdapter.Update(this.libraryDataSet.Catalog);
this.readersTableAdapter.Update(this.libraryDataSet.Readers);
this.instancesTableAdapter.Update(this.libraryDataSet.Instances);
this.placed_in_the_catalogTableAdapter.Update(this.libraryDataSet.Placed_in_the_catalog);
MessageBox.Show("Update successful");
}
catch (System.Exception ex)
{
MessageBox.Show("Update failed: " + ex.Message);
}
}
-
С помощью кнопки Sync будет выполняться синхронизация нашего локального кэша с основной базой данных.
private void button1_Click(object sender, EventArgs e)
{
try
{
LocalDataCache1SyncAgent syncAgent = new LocalDataCache1SyncAgent();
Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize();
MessageBox.Show("Changes downloaded: " + syncStats.TotalChangesDownloaded.ToString() + Environment.NewLine + "Changes uploaded: " + syncStats.TotalChangesUploaded.ToString());
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
-
Также для того, чтобы обеспечить именно двухстороннюю синхронизацию, в окне Solution Explorer на MyLocalDataCache.sync жмем правой клавишей мыши, выбираем View Code и задаем такой код:
namespace WindowsFormsApplication31 {
public partial class LocalDataCache1SyncAgent {
partial void OnInitialized(){
this._booksSyncTable.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
this._catalogSyncTable.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
this._readersSyncTable.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
this._instancesSyncTable.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
this._placed_in_the_catalogSyncTable.SyncDirection = Microsoft.Synchronization.Data.SyncDirection.Bidirectional;
}
}
}
-
Получилось готовое приложение.
Рисунок 35 Приложение с применением технологии Change Tracking
Заключение
По итогам выполнения программы учебной практики, рассчитанной на 72 часа по профессиональному модулю «Разработка и администрирование баз данных» были приобретены следующие знания и умения:
-
знание основных положений теории баз данных, хранилищ данных, баз знаний; -
знание основных принципов построения концептуальной, логической и физической модели данных; -
знание современных инструментальных средств разработки схемы базы данных; -
знание методов описания схем баз данных в современных СУБД; -
знание структуры данных СУБД, общего подхода к организации представлений, таблиц, индексов и кластеров; -
знание методов организации целостности данных; -
умение осуществлять сбор, обработку и анализ информации для проектирования баз данных; -
умение спроектировать базу данных на основе анализа предметной области; -
умение разработать объекты базы данных в соответствии с результатами анализа предметной области; -
умение реализовывать базу данных в конкретной системе управления базами данных; -
навык разработки прикладных программ; -
навык применения стандартных методы для защиты объектов базы данных.
Список использованных источников
-
. Логачев, М. С. Информационные системы и программирование. Администратор баз данных. Выпускная квалификационная работа [Электронный ресурс]: учебник / М.С. Логачёв. — Москва: ИНФРА-М, 2021. — 439 с. — Режим доступа: https://znanium.com/catalog/product/1141783 -
. Голицына, О. Л. Основы проектирования баз данных [Электронный ресурс]: учеб. пособие / О. Л. Голицына, Т. Л. Партыка, И. И Попов. – 2-е изд., перераб. и доп. – М.: Форум, НИЦ ИНФРА-М, 2021. – 416 с. – Режим доступа: https://znanium.com/catalog/product/1190668 -
. Кумскова, И.А. Базы данных [Электронный ресурс]: учебник / Кумскова И.А. — Москва: КноРус, 2020. — 400 с. — Режим доступа: https://book.ru/book/932493 -
. Стасышин, В. М. Базы данных: технологии доступа [Электронный ресурс]: учебное пособие / В. М. Стасышин, Т. Л. Стасышина. — 2-е изд., испр. и доп. — Москва: Издательство Юрайт, 2020. — 164 с. — Режим доступа: https://urait.ru/bcode/455863 -
.Чулюков, В.А. Проектирование баз данных. Практический курс [Электронный ресурс]: учебное пособие / Чулюков В.А., Астахова И.Ф., Башарина С.О., Сидорова О.А. — Москва: Русайнс, 2020. — 163 с. — Режим доступа: https://book.ru/book/938011 -
.Полищук, Ю. В. Базы данных и их безопасность [Электронный ресурс]: учебное пособие / Ю. В. Полищук, А. С. Боровский. - Москва : ИНФРА-М, 2021. - 210 с. – Режим доступа: https://znanium.com/catalog/product/1084368 -
.Мартишин, С. А. Базы данных. Практическое применение СУБД SQL- и NoSQL-типа для проектирования информационных систем [Электронный ресурс]: учебное пособие / С.А. Мартишин, В.Л. Симонов, М.В. Храпченко. — Москва: ФОРУМ: ИНФРА-М, 2021. — 368 с. – Режим доступа: https://znanium.com/catalog/product/1243192 -
Приложение 1
Рисунок 36 Главное меню в приложении
using System;
using System.Data;
using System.Windows.Forms;
namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2();
newForm.Show();
}
private void button2_Click(object sender, EventArgs e)
{
Form3 newForm = new Form3();
newForm.Show();
}
private void button3_Click(object sender, EventArgs e)
{
Form4 newForm = new Form4();
newForm.Show();
}
private void button4_Click(object sender, EventArgs e)
{
Form5 newForm = new Form5();
newForm.Show();
}
private void button5_Click(object sender, EventArgs e)
{
Form6 newForm = new Form6();
newForm.Show();
}
}
}
Рисунок 37 Форма для работы с таблицей Книги
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication21
{
public partial class Form2 : Form
{
DataSet НаборДанных;//ds
OleDbDataAdapter Адаптер;//da
OleDbConnection Подключение;//con
OleDbCommand Команда;//cmd
void GetKnigi()
{
Подключение = new OleDbConnection("Data Source=\"D:\\SQL1.mdb\";User " + "ID=Admin;Provider=\"Microsoft.Jet.OLEDB.4.0\";");
Адаптер = new OleDbDataAdapter("Select * From [Книги]", Подключение);
НаборДанных = new DataSet();
Подключение.Open();
Адаптер.Fill(НаборДанных, "Книги");
dataGridView1.DataSource = НаборДанных.Tables["Книги"];
Подключение.Close();
}
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form2_Load(object sender, EventArgs e)
{
GetKnigi();
}
private void button2_Click(object sender, EventArgs e)//удаление записи
{
string query = "Delete From Книги Where ISBN=@ISBN";
Команда = new OleDbCommand(query, Подключение);
Команда.Parameters.AddWithValue("@ISBN", dataGridView1.CurrentRow.Cells[0].Value);
Подключение.Open();
Команда.ExecuteNonQuery();
Подключение.Close();
GetKnigi();
}
private void button3_Click(object sender, EventArgs e)//добавление записи
{
string query = "Insert into Книги (ISBN,Автор,Название,Издательство,Место_издания,Год_издания,Кол_во_страниц) values (@ISBN,@avtor,@nazv,@izdat,@Mizd,@god,@str)";
Команда = new OleDbCommand(query, Подключение);
Команда.Parameters.AddWithValue("@ISBN", Convert.ToInt64(textBox1.Text));
Команда.Parameters.AddWithValue("@avtor", textBox2.Text);
Команда.Parameters.AddWithValue("@nazv", textBox3.Text);
Команда.Parameters.AddWithValue("@izdat", textBox4.Text);
Команда.Parameters.AddWithValue("@Mizd", textBox5.Text);
Команда.Parameters.AddWithValue("@god", Convert.ToInt32(textBox6.Text));
Команда.Parameters.AddWithValue("@str", Convert.ToInt32(textBox7.Text));
Подключение.Open();
Команда.ExecuteNonQuery();
Подключение.Close();
GetKnigi();
}
private void button4_Click(object sender, EventArgs e)
{
string query = "Update Книги Set ISBN=@ISBN,Автор=@avtor,Название=@nazv,Издательство=@izdat,Место_издания=@Mizd,Год_издания=@god,Кол_во_страниц=@str Where ISBN=@ISBN";
Команда = new OleDbCommand(query, Подключение);
Команда.Parameters.AddWithValue("@ISBN", Convert.ToInt64(textBox1.Text));
Команда.Parameters.AddWithValue("@avtor", textBox2.Text);
Команда.Parameters.AddWithValue("@nazv", textBox3.Text);
Команда.Parameters.AddWithValue("@izdat", textBox4.Text);
Команда.Parameters.AddWithValue("@Mizd", textBox5.Text);
Команда.Parameters.AddWithValue("@god", Convert.ToInt32(textBox6.Text));
Команда.Parameters.AddWithValue("@str", Convert.ToInt32(textBox7.Text));
Подключение.Open();
Команда.ExecuteNonQuery();
Подключение.Close();
GetKnigi();
}
private void dataGridView1_CellEnter_1(object sender, DataGridViewCellEventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox3.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textBox4.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
textBox5.Text = dataGridView1.CurrentRow.Cells[4].Value.ToString();
textBox6.Text = dataGridView1.CurrentRow.Cells[5].Value.ToString();
textBox7.Text = dataGridView1.CurrentRow.Cells[6].Value.ToString();
}
}
}
Рисунок 38 Форма для работы с таблицей Каталог
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication21
{
public partial class Form3 : Form
{
DataSet НаборДанных;//ds
OleDbDataAdapter Адаптер;//da
OleDbConnection Подключение;//con
OleDbCommand Команда;//cmd
void GetKatalog()
{
Подключение = new OleDbConnection("Data Source=\"D:\\SQL1.mdb\";User " + "ID=Admin;Provider=\"Microsoft.Jet.OLEDB.4.0\";");
Адаптер = new OleDbDataAdapter("Select * From [Каталог]", Подключение);
НаборДанных = new DataSet();
Подключение.Open();
Адаптер.Fill(НаборДанных, "Каталог");
dataGridView1.DataSource = НаборДанных.Tables["Каталог"];
Подключение.Close();
}
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
GetKatalog();
}
private void button2_Click(object sender, EventArgs e)//удаление записи
{
string query = "Delete From Каталог Where Код_области_знаний=@Код_области_знаний";
Команда = new OleDbCommand(query, Подключение);
Команда.Parameters.AddWithValue("@Код_области_знаний", dataGridView1.CurrentRow.Cells[0].Value);
Подключение.Open();
Команда.ExecuteNonQuery();
Подключение.Close();
GetKatalog();
}
private void button1_Click(object sender, EventArgs e)//закрыть
{
this.Close();
}
private void button3_Click(object sender, EventArgs e)//Вставка данных в таблицу
{
string query = "Insert into Каталог (Код_области_знаний,Название_области_знаний) values (@kOblZn,@nOblZn)";
Команда= new OleDbCommand(query, Подключение);
Команда.Parameters.AddWithValue("@kOblZn", Convert.ToInt32(textBox1.Text));
Команда.Parameters.AddWithValue("@nOblZn", textBox2.Text);
Подключение.Open();
Команда.ExecuteNonQuery();
Подключение.Close();