- •Розробка та вивчення додатку для роботи з базами даних (роз‘єднане середовище)
- •Постановка задачи
- •Письменный отчет по лабораторной работе должен содержать:
- •Обработчики событий
- •Внешний вид проекта
- •Исходный код проекта
- •Класс формы с обработчиками событий:
- •Диаграммы классов и бд Диаграмма классов проекта:
- •Диаграмма бд:
- •Поля и методы классов
- •Исследование программной реализации
Обработчики событий
Обработчик события |
Назначение |
button_select_query_Click |
Запрос с оператором SELECT |
comboBox_select_query_SelectedIndexChanged |
Обновление списка полей по изменению таблицы |
comboBox_insert_query_SelectedIndexChanged |
Обновление списка полей по изменению таблицы |
button_clear_datagrid_Click |
Очистка dataGridView |
button_connect_Click |
Попытка соединения с базой данных. Если успешно, то и сохранение настроек |
button_insert_query_Click |
Запрос с оператором INSERT |
button_update_query_Click |
Запрос с оператором UPDATE |
button_delete_query_Click |
Запрос с оператором DELETE |
button4_Click |
Расчет №1 |
button5_Click |
Расчет №2 |
button6_Click |
Расчет №2 |
Внешний вид проекта
Окно запроса с оператором SELECT
Окно запроса с операторами INSERT, UPDATE, DELETE
Окно расчетов на основании запросов
Окно подключения к базе данных
Окно об авторе
Исходный код проекта
Класс Gridder:
class Gridder
{
private static DataGridView dGV = null; // data grid view to work with
//=============== A 'Single' pattern ===============//
private static Gridder instance = null;
private Gridder() { }
public static Gridder getInstance() {
if (instance == null)
return new Gridder();
return instance;
}
//===============================================//
/// <summary>
/// DataGridView to display info on
/// </summary>
public DataGridView DataGrid
{
set { Gridder.dGV = value; }
}
/// <summary>
/// Send a query and get info
/// </summary>
/// <param name="query"></param>
/// <param name="returnArray">put data in array. Otherwise it will put it in a DataGridView</param>
/// <param name="select">do we need an answer at all?</param>
/// <returns></returns>
public String[,] queryAndShow(String query, bool returnArray = false, bool select = true)
{
// don't do anything if we need dataGridView but it doesn't exist
if (((dGV == null) && !returnArray)) return null;
// generate string of connection
string connectionString = "Server=" + Settings.Default.Server + ";Database=" + Settings.Default.Database + ";User Id=" + Settings.Default.Login + ";" + "Password=" + Settings.Default.Password + ";";
SqlConnection con = new SqlConnection(connectionString);
try
{
// open database connection
con.Open();
//MessageBox.Show("Connection is open ");
}
catch { MessageBox.Show("Connection is not open "); }
// здесь перехватываются все исключения
SqlCommand cmd; // contains a command
SqlDataReader dr; // contains a result
String [,] arr = null; // contains answer
cmd = new SqlCommand(query, con);
// метод ExecuteReader выполняет команду, возвращающую множество строк
try
{
dr = cmd.ExecuteReader(); // run query
if (select)
{
int i = 0, k = 0;
// определение числа возвращаемых строк k
while (dr.Read())
{ k += 1; }
dr.Close();// закрытие dr
//повторный вызов метода
dr = cmd.ExecuteReader();
if (!returnArray)
{
dGV.RowCount = k; // число строк в сетке равно k
dGV.ColumnCount = dr.FieldCount;
} else
{
arr = new String[k, dr.FieldCount];
}
while (dr.Read()) // выбор данных
{
if (!returnArray)
{
// for dataGridView
for (int j = 0; j < dr.FieldCount; j++)
dGV[j, i].Value = dr[j].ToString();
}
else
{
// for array
for (int j = 0; j < dr.FieldCount; j++)
arr[i, j] = dr[j].ToString();
}
i += 1;
}
if (!returnArray)
{
// задание имен полей сетки с помощью метода dr.GetName(j)
for (int j = 0; j < dr.FieldCount; j++)
dGV.Columns[j].HeaderText = dr.GetName(j);
for (int km = 0; km < dGV.Columns.Count; km++)
{
// autosize
dGV.Columns[km].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
}
dr.Close();// закрытие объекта dr
}
catch (Exception e) { MessageBox.Show(e.Message + "\nQUERY = '" + query + "'", "Error"); }
try
{
con.Close();
//MessageBox.Show("Connection is closed ");
}
catch { MessageBox.Show("Connection is not closed"); }
return arr; // anyway return an array
}
}
