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» – название базы данных.

SQL Server (SQL Express) База данных Education.dbo

Рис. 1. База данных Education.dbo

База данных содержит две таблицы: Student и Session. Структура таблиц следующая.

Таблица Student.

Таблица Student

Таблица Session.

Таблица Session

 


Выполнение

1. Создать новый проект в MS Visual Studio как Windows Forms Application.

Создать новый проект типа Windows Forms Application. Пример создания нового проекта подробно описывается здесь.

 

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

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

В нашем случае данные таблиц будут отображаться на форме в элементе управления типа DataGridView. После создания представлений, очень удобно их связать с элементами DataGridView.

Для создания представления, нужно вызвать команду «Add New View» из контекстного меню, которое вызывается кликом правой кнопкой мышки на элементе «Views» базы данных Education.dbo (рисунок 2).

База данных SQL Server команда "Add New View"

Рис. 2. Вызов команды добавления нового представления

В результате откроется окно «Add Table» (рисунок 3). В окне нужно выбрать таблицы, которые добавляются к представлению.

SQL Server Выбор таблица команда Add Table

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

В нашем случае выбираем таблицу Student и подтверждаем свой выбор кликом на кнопке Add. Следующим шагом нужно закрыть окно выбором кнопки Close.

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

При выборе полей, в верхней части рабочей области отображаются поля таблицы Student. С помощью «мышки» можно выбирать нужные поля для представления.

Соответственно, в средней области окна отображаются названия выбранных полей, таблица в которой они есть (см. рис. 4), возможность сортировки, фильтрование и прочее.

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

MS SQL Server Выбор полей таблица Student

Рис. 4. Выбор полей таблицы Student для их отображения в представлении

После выбора команды

File->Save All

или

File->Save View1

откроется окно, в котором нужно указать имя представления. Задаем имя «View Student» (рисунок 5).

MS SQL Server Указание имени представление

Рис. 5. Указание имени для представления

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

MS SQL Server Представление

Рис. 6. Представление View Student в базе данных

Теперь можно размещать элемент управления DataGridView и связывать его с представлением.

 

3. Размещение элемента управления DataGridView и настройка связи с базой данных.

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

Элемент DataGridView представляет собой таблицу, которая может отображать данные. Данный элемент управления размещается в панели ToolBox. Сначала немного корректируем размеры формы, а потом размещаем на ней элемент управления DataGridView (рисунок 7). В результате будет создан экземпляр объекта с именем dataGridView1 по умолчанию.

SQL Server Элемент управления DataGridView окно выбора источника данных

Рис. 7. Элемент управления DataGridView и окно выбора источника данных

После размещения элемента управления типа DataGridView на форме в правом верхнем углу можно выбрать настройку источника данных. Соответственно откроется окно «DataGridView Tasks«. В этом окне нужно выбрать сплывающее меню «Choose Data Source«.

В открывшемся меню выбирается команда «Add Project Data Source…» (рис. 7). После этого открывается окно мастера, в котором последовательно выбирается источник данных.



На рисунке 8 показано окно «Data Source Configuration Wizard«, в котором выбирается тип источника данных. В нашем случае устанавливаем «Database«.

База данных MS SQL Server тип источника данных

Рис. 8. Выбор типа источника данных

В следующем окне (Рисунок 9) выбирается модель источника данных. Нужно выбрать DataSet.

MS SQL Server Выбор модели источника данных

Рис. 9. Выбор модели источника данных

В окне, изображенном на рисунке 10, нужно задать соединение данных, которое нужно использовать для подключения к базе данных. В нашем случае нужно выбрать базу данных «sasha-pc\sqlexpress\Education.dbo«.

MS SQL Server соединение данных

Рис. 10. Выбор соединения данных

В следующем окне (рисунок 11) предлагается сохранить строку соединения Connection String в конфигурационный файл приложения. Оставляем все как есть и переходим к следующему окну.

Предложение сохранения Connection String конфигурационный файл

Рис. 11. Предложение сохранения строки соединения с базой данных Connection String в конфигурационном файле приложения

После создания соединения с базой данных отображается множество объектов базы данных (рисунок 12). В нашем случае нужно выбрать представление «View Student» и все поля из него. Отмеченные поля будут отображаться в компоненте типа DataGridView.

MS SQL Server объект база данных DataGridView

Рис. 12. Выбор объектов базы данных, которые нужно отображать в DataGridView

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

C# Windows Forms Application Элемент управления 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).

MS SQL Server Команда "Edit Columns..."

Рис. 15. Команда «Edit Columns…» из контекстного меню

В результате откроется окно «Edit Columns«, в котором можно настроить вид полей представления по собственному вкусу (рисунок 16).

MS SQL Server Окно настройки вида полей "View Student"Рис. 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 добавляем три кнопки (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.

 


Связанные темы