C#. Windows Forms. Приклад програми демонстрації основних операцій над даними таблиці бази даних MS SQL Server (SQLEXPRESS)




Приклад програми демонстрації основних операцій над даними таблиці бази даних MS SQL Server (SQLEXPRESS)


Зміст


Пошук на інших ресурсах:

Умова задачі

Розробити додаток, який демонструє основні операції над даними в базі даних типу MS SQL Server, а саме:

  • підключення бази даних до додатку;
  • відображення таблиць бази даних на формі;
  • додавання нового запису базу даних;
  • редагування запису;
  • видалення запису.

За основу взята база даних Education.dbo, процес створення якої детально описаний тут.

На рисунку 1 відображено структуру бази даних Education.dbo. Як видно з рисунку, база даних має ім’я:

sasha-pc\sqlexpress.Education.dbo

Тут “sasha-pc” – ідентифікатор комп’ютера в мережі, “sqlexpress” – назва сервера баз даних, “Education.dbo” – назва бази даних.

MS SQL Server База даних Education.dboРис. 1. База даних Education.dbo

База даних містить дві таблиці: Student та Session. Структура таблиць наступна.

Таблиця Student

Таблиця Student

Таблиця Session

Таблиця Session

 


Виконання

1. Створення проекту типу Windows Forms Application в MS Visual Studio.

Створити новий проект типу Windows Forms Application. Приклад створення нового проекту детально описується тут.

 

2. Створення нового представлення (view) для відображення даних таблиці Student.

Щоб відображати дані таблиць бази даних, можна використовувати різні способи. Один з них – це створення представлень (views), які формуються засобами MS Visual Studio.

У нашому випадку дані таблиць будуть відображатись на формі в елементі управління типу DataGridView. Після побудови представлень, дуже зручно їх зв’язати з елементами DataGridView.

Для створення представлення, потрібно викликати команду “Add New View” з контекстного меню, що викликається при кліку на елементі “Views” бази даних Education.dbo (рисунок 2).

MS SQL Server команда додавання нового представленняРис. 2. Виклик команди додавання нового представлення

У результаті відкриється вікно “Add Table” (рисунок 3). У вікні потрібно вибрати таблиці, що додаються у представлення.

У нашому випадку вибираємо таблицю Student і підтверджуємо свій вибір кліком на кнопці Add. Наступним кроком потрібно закрити вікно вибором кнопки Close.

MS SQL Server Вибір таблицяРис. 3. Вибір таблиць, на основі яких буде базуватись нове представлення

Після виконаних дій буде сформовано відображення, у якому потрібно вибрати поля, які мають відображатись на формі. Вибираємо усі поля (рисунок 4).

При виборі полів, у верхній частині робочої області відображаються поля таблиці Student. З допомогою “мишки” можна вибирати потрібні поля для представлення.

Відповідно, в середній області вікна відображаються назви вибраних полів, таблиця в якій вони є (див. рис. 4), можливість сортування, фільтрування та інше.

У нижній частині області відображається відповідний текст SQL-запиту, що використовується для представлення.

База даних MS SQL Server поля таблиця представленняРис. 4. Вибір полів таблиці Student для їх представлення

Після вибору команди

File->Save All

або

File->Save View1

відкриється вікно, в якому потрібно задати ім’я представлення. Задаємо ім’я “View Student” (рисунок 5.

SQL Server Задавання представлення ім'яРис. 5. Задавання імені для представлення

Після виконаних дій, вікно представлення матиме вигляд як показано на рисунку 6.

MS Visual Studio Представлення View StudentРис. 6. Представлення View Student у базі даних

Тепер можна розміщувати елемент управління DataGridView та з’язувати його з представленням.

 

3. Розміщення елементу управління DataGridView та налаштування зв’язку з базою даних.

Перед розміщенням елементу управління DataGridView потрібно перейти в режим проектування форми “Form1.cs [Design]“.

Елемент DataGridView представляє собою таблицю, що має відображати дані. Даний елемент управління розміщується в панелі ToolBox. Спочатку дещо корегуємо розміри форми, а потім розміщуємо на ній елемент управління DataGridView (рисунок 7). У результаті буде створено екземпляр об’єкту з іменем dataGridView1 за замовчуванням.

MS Visual Studio Елемент управління DataGridViewРис. 7. Елемент управління DataGridView та вікно вибору джерела даних

Після розміщення елементу управління типу DataGridView на формі у правому верхньому куті можна вибрати налаштування джерела даних. Відповідно відкриється вікно “DataGridView Tasks“. У цьому вікні потрібно вибрати спадне меню “Choose Data Source“.

У меню, що відкриється вибирається команда “Add Project Data Source…” (рис. 7). Після цього відкривається вікно майстра, в якому послідовно вибирається джерело даних.



На рисунку 8 показано вікно “Data Source Configuration Wizard“, в якому вибирається тип джерела даних. У нашому випадку встановлюємо “Database“.

База даних MS Visual Studio тип джерело данихРис. 8. Вибір типу джерела даних

У наступному вікні (рисунок 9) вибирається модель джерела даних. Потрібно вибрати DataSet.

MS Visual Studio Вибір моделі джерела данихРис. 9. Вибір моделі джерела даних

У вікні, зображеному на рисунку 10, потрібно задати з’єднання даних, яке потрібно використати для підключення до бази даних. У нашому випадку потрібно вибрати базу даних “sashapc\sqlexpress\Education.dbo“.

MS SQL Server з’єднання даних база данихРис. 10. Вибір з’єднання даних

У наступному вікні (рисунок 11) пропонується зберегти рядок з’єднання Connection String в конфігураційний файл додатку. Залишаємо все як є і переходимо до наступного вікна.

MS SQL Server база даних з'єднання Connection StringРис. 11. Пропозиція збереження рядка з’єднання з базою даних Connection String в конфігураційному файлі додатку

Після побудови з’єднання з базою даних висвічується множина об’єктів бази даних (рисунок 12). У нашому випадку потрібно вибрати представлення “View Student” і всі поля з нього. Відмічені поля будуть відображатися в компоненті типу DataGridView.

MS SQL Server об’єкти база даних dataGridViewРис. 12. Вибір об’єктів бази даних, які потрібно відображати в DataGridView

Після вибору кнопки Finish буде відображено вибрані об’єкти (представлення View Student) бази даних Education.dbo (рисунок 13).

MS SQL Server Елемент управління типу DataGridViewРис. 13. Елемент управління типу DataGridView з вибраними полями представлення View Student

Подібним чином можна налаштовувати представлення, що містять будь-які поля з будь-яких таблиць бази даних. Також в одному представленні можуть відображатись поля з різних таблиць.

 

4. Налаштування вигляду елементу управління типу DataGridView.

Якщо запустити додаток на виконання, то буде отримано дані представлення View Student, яке відповідає таблиці Student бази даних (рисунок 14).

C# Windows Forms додаток виконанняРис. 14. Завантаження додатку на виконання

Як видно з рисунку 14, дані в таблиці dataGridView1 відображаються добре, але оформлення можна скорегувати.

Елемент управління типу DataGridView допускає коригування вигляду полів, що відображаються.

Для виклику команд редагування полів, достатньо викликати контекстне меню кліком правою кнопкою мишки на елементі управління dataGridView1.

У меню є різні корисні команди, що дозволяють управляти виглядом та роботою DataGridView:

  • команда блокування елементу управління (Lock Controls);
  • команда редагування полів, що відображаються у представленні (Edit Columns…);
  • команда додавання нових полів, наприклад розрахункових (Add Column).

У нашому випадку потрібно вибрати команду “Edit Columns…” (рисунок 15).

C# Windows Forms команда "Edit Columns..." dataGridViewРис. 15. Виклик команди “Edit Columns…” з контекстного меню

У результаті відкриється вікно “Edit Columns“, в якому можна налаштувати вигляд полів представлення на власний смак (рисунок 16).

C# Windows Forms Вікно представлення налаштуванняРис. 16. Вікно налаштування вигляду полів у представленні “View Student

У вікні на рисунку 16 для кожного поля можна налаштовувати назву, вирівнювання, ширину, можливість редагування даних тощо.

 


5. Рядок Connection String.

Для того, щоб в базу даних вносити зміни, потрібно отримати рядок з’єднання з базою даних Connection String.

Є різні способи отримання рядка з’єднання з базою даних. Один з них базується на читанні цього рядка у вікні Properties бази даних Education.dbo (рис. 17).

C# Windows Forms рядок Connection StringРис. 17. Визначення рядка Connection String

Для збереження рядка в програмі вводиться внутрішня змінна типу string. З допомогою буферу обміну копіюємо рядок Connection String в описану змінну типу string.

У тексті файлу “Form1.cs” на початку опису класу Form1 треба описати змінну

string conn_string = @"Data Source=(local)\SQLEXPRESS;Initial Catalog=Education;Integrated Security=True;Pooling=False";

На даний момент текст класу Form1 наступний:

public partial class Form1 : Form
{
    string conn_string = @"Data Source=(local)\SQLEXPRESS;Initial Catalog=Education;Integrated Security=True;Pooling=False";

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'educationDataSet.View_Student' table. You can move, or remove it, as needed.
        this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
    }
}

 

6. Створення нової форми для демонстрації команд оперування даними.

Для того, щоб мати можливість обробляти дані поточного запису потрібно створити нову форму. Процес створення нової форми в MS Visual Studio – C# детально описується тут.

Форма додається командою:

Project -> Add Windows Form...

У вікні, що відкриється “New Item” потрібно вибрати елемент “Windows Form“.

Ім’я файлу нової форми залишаємо за замовчуванням “Form2.cs“.

На рисунку 18 зображено вигляд нової форми.

Розміщуємо на формі елементи управління наступних типів:

  • два елементи управління типу Button (кнопки OK та Cancel). Відповідно буде отримано два об’єкти з іменами button1 та button2;
  • чотири елементи управління типу Label для створення інформаційних повідомлень;
  • чотири елементи управління типу TextBox для вводу даних в полях Num_book, Name, Group, Year.

Потрібно налаштувати такі властивості елементів управління:

  • в елементі управління button1 властивість Text = “OK“;
  • в елементі управління button2 властивість Text = “Cancel“;
  • в елементі управління button1 властивість DialogResult = “OK“;
  • в елементі управління button2 властивість DialogResult = “Cancel“;
  • в елементі управління label1 властивість Text = “Num_book“;
  • в елементі управління label2 властивість Text = “Name“;
  • в елементі управління label3 властивість Text = “Group“;
  • в елементі управління label4 властивість Text = “Year“.

Також налаштовуємо видимість елементів управління типу TextBox. Для цього у всіх елементах управління textBox1, textBox2, textBox3, textBox4 значення властивості Modifiers = “public“.

C# Windows Forms новостворена формаРис. 18. Вигляд новоствореної форми

 

7. Додавання кнопок виклику команд оперування даними таблиці Student.

Для подальшої роботи потрібно з допомогою мишки переключитись на головну форму Form1.

На головну форму додатку Form1.cs додаємо три кнопки (Button). Автоматично буде створено три змінні–об’єкти з іменами button1, button2, button3. У кожній з цих кнопок вносимо такі налаштування (окно Properties):

  • у кнопці button1 властивість Text = “Insert …” (вставка запису);
  • у кнопці button2 властивість Text = “Edit …” (змінити запис);
  • у кнопці button3 властивість Text = “Delete“.

У результаті внесених змін основна форма буде мати приблизний вигляд як зображено на рисунку 19.

C# Windows Forms Основна форма додатокРис. 19. Основна форма додатку

 

8. Програмування події кліку на кнопці “Insert….

Обробник події кліку на кнопці “Insert…” має вигляд:

private void button1_Click_1(object sender, EventArgs e)
{
    string cmd_text;
    Form2 f2 = new Form2();
    if (f2.ShowDialog() == DialogResult.OK)
    {
        cmd_text = "INSERT INTO Student VALUES (" +
        "'" + f2.textBox1.Text + "' , '" +
        f2.textBox2.Text + "' , '" +
        f2.textBox3.Text + "' , " +
        f2.textBox4.Text + ")";

        // создать соединение с базой данных
        SqlConnection sql_conn = new SqlConnection(conn_string);

        // создать команду на языке SQL
        SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn);

        sql_conn.Open(); // открыть соединение
        sql_comm.ExecuteNonQuery(); // выполнить команду на языке SQL
        sql_conn.Close(); // закрыть соединение

        this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
    }
}

Спочатку викликається форма Form2. Після отримання результату “OK” (натиск відповідної кнопки), у формі Form2 заповнені поля в елементах типу TextBox включаються в рядок SQL-запиту. SQL-запит додавання нового рядка має вигляд:

INSERT INTO Student
VALUES (value1, value2, value3, value4)

де value1 відповідає номеру залікової книжки; value2 – прізвище студента; value3 – група, в якій навчається студент; value4 – рік вступу.

Рядок з’єднання з базою даних Connection String записаний в змінній conn_string (див. п. 5). Об’єкт класу SqlConnection здійснює з’єднання додатку з джерелами даних. Крім того, клас Connection вирішує задачі аутентифікації користувачів, роботу з мережами, ідентифікацію баз даних, буферизацію з’єднань і обробку транзакцій.

Команда на мові SQL, що додає запис до таблиці, інкапсульована в класі SqlCommand. Конструктор класу SqlCommand приймає два параметри: рядок запиту на мові SQL (змінна cmd_text) та об’єкт класу SqlConnection.

Метод ExecuteNonQuery() реалізований в інтерфейсі IDBCommand. Метод реалізує SQL-команди, які не повертають дані. До таких команд відносяться команди INSERT, DELETE, UPDATE а також збережені процедури, що не повертають даних. Метод ExecuteNonQuery() повертає кількість задіяних ним записів.

 


9. Програмування події кліку на кнопці “Edit…“.

Обробник події кліку на кнопці “Edit…” має вигляд:

private void button2_Click(object sender, EventArgs e)
{
    string cmd_text;
    Form2 f2 = new Form2();
    int index;
    string num_book;

    index = dataGridView1.CurrentRow.Index;
    num_book = Convert.ToString(dataGridView1[0, index].Value);

    f2.textBox1.Text = num_book;
    f2.textBox2.Text = Convert.ToString(dataGridView1[1, index].Value);
    f2.textBox3.Text = Convert.ToString(dataGridView1[2, index].Value);
    f2.textBox4.Text = Convert.ToString(dataGridView1[3, index].Value);

    if (f2.ShowDialog() == DialogResult.OK)
    {
        cmd_text = "UPDATE Student SET Num_book = '" + f2.textBox1.Text + "', " +
        "[Name] = '" + f2.textBox2.Text + "', " +
        "[Group] = '" + f2.textBox3.Text + "', " +
        "Year = " + f2.textBox4.Text +
        "WHERE Num_book = '" + num_book + "'";

        SqlConnection sql_conn = new SqlConnection(conn_string);
        SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn);

        sql_conn.Open();
        sql_comm.ExecuteNonQuery();
        sql_conn.Close();

        this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
    }
}

У цьому обробнику виконується SQL-команда UPDATE, що змінює поточне значення активного запису.

 

10. Програмування події кліку на кнопці “Delete“.

Обробник події кліку на кнопці “Delete” має вигляд:

private void button3_Click(object sender, EventArgs e)
{
    string cmd_text = "DELETE FROM Student";
    int index;
    string num_book;

    index = dataGridView1.CurrentRow.Index;
    num_book = Convert.ToString(dataGridView1[0,index].Value);
    cmd_text = "DELETE FROM Student WHERE [Student].[Num_book] = '" + num_book + "'";

    SqlConnection sql_conn = new SqlConnection(conn_string);
    SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn);

    sql_conn.Open();
    sql_comm.ExecuteNonQuery();
    sql_conn.Close();

    this.view_StudentTableAdapter.Fill(this.educationDataSet.View_Student);
}

У цьому обробнику виконується SQL-команда видалення запису DELETE.

 


Зв’язані теми