- 20.06.2022
- 23 849
- 218
- 36
- Награды
- 10
- Пол
- Муж.
Репутация:
- Автор темы
- Администратор
- Модератор
- Команда форума
- #1
В этом мини-туториале мы с вами с нуля напишем десктопное приложение на С#, которое будет работать с базой данных.
Как это сделать?
Создать проект -> Visual C# -> Приложение Windows Forms -> *Выбираем название для проекта и его расположение* -> OK
Теперь у вас готов проект и можно приступать к работе!
Далее следует поработать над дизайном наших форм. Не будем сильно изощряться и сделаем максимально минималистичный дизайн:
Главное меню
Меню выбора
Меню выбора для редактирования
Форма для добавления нового пользователя
Так-с. Дальше пока что мы не пойдём, так как для начала нам нужно понять как всё будет работать. У нас есть форма для добавления каратиста, и нам еще нужны формы для создания запросов, для просмотра базы данных и для редактирования её. Но где сама база данных?
Её нет. Поэтому нам нужно немедленно её создать!
Раскрываем директорию с нашей базой данных и видим самую первую папку "Таблицы" - она нас и интересует. Жмём по ней правой кнопкой мыши и нажимаем "Добавить новую таблицу".
Можно создать таблицу двумя путями: 1) Конструктором 2) Через SQL код
Если вам лень делать её самим, то скопируйте следующий SQL код и вставьте его в поле с кодом у таблицы:
Коротко о типах данных в SQL
null - указываем может ли переменная быть пустой, то есть не содержать информации
primary key - первичный ключ, в данном случае это member_id. Таким образом, все значения member_id уникальны
После того как вы создали таблицу, нужно её сохранить. Нажмите ctrl + s или просто закройте файл с таблицей после чего у вас появится сообщение о сохранении таблицы.
Ок, теперь у нас есть база данных и таблица, где будет храниться информация о каратистах.
Здесь мы создали строковую переменную conString и присвоили ей значение строки подключения базы данных. Чтобы посмотреть вашу строку подключения нажмите правой кнопкой мыши по базе данных и выберите "Свойства":
Теперь два раза нажимаем на кнопку "Add" в конструкторе нашей формы и таким образом открываем код, который будет выполняться при её нажатии. Вот код метода, который выполняется при нажатии:
Мы создаём объект con типа SqlConnection и если наша база данных подключена к приложению у нас будет выполняться код находящийся под блоком if. Там у нас сохранена SQL команда в строке q, которая позже передаётся в объект cmd типа SqlCommand, который позже выполняет функцию ExecuteNonQuery, которая выполняет данный SQL запрос. После при успешном выполнении в приложении выведется сообщение об успешном добавлении каратиста. Всё достаточно просто!
Кстати, как работают кнопки навигации в приложении, то есть для перехода между формами?
Вот держите пример кода, по этому шаблону они все и работают:
Далее давайте напишем код для формы с обычным просмотром базы данных. Допустим, что мы уже заполнили базу данных и она должна выглядить так при работе приложения:
Чтобы ��рийти к такому результату нам нужно добавить в нашу форму DataGridView, объект, который будет отображать таблицу. Сделать это очень просто, на скриншоте это видно:
В классе этой формы пишем следующее:
Что-то наподобии этой строчки у вас должно появиться автоматически в Load методе класса вашей формы:
Она заполняет DataGridView данными из таблицы. Теперь в этот же метод Load добавляем эти строчки кода. С помощью них база данных будет постоянно обновляться внешне:
Готово!
А как сделать так, чтобы каратисты показывались по определённым критериям? Здесь нам нужно делать уже SQL запрос, но о них информация будет чуть позже на канале. Создаём новую форму, добавляем DataGridView и несколько текстовых полей. Кто шарит в SQL, тот поймёт в чем смысл этой формы:
Пишем код в метод, который будет выполняться при нажатии на кнопку "Show":
В принципе, алгоритм здесь тот же самый, но мы уже создаем отдельный DataSet - коллекцию неупорядоченных данных, которые позже будут отображаться в DataGridView. Сам же DataSet был заполнен теми данными, которые получились от SQL запроса.
Форма готова!
Напоследок осталось одно из самых сложных - сделать форму с редактированием базы данных. Вот, как она выглядит:
Как всегда пишем эти строчки кода в класс формы:
А это, как я раньше писал, для постоянного внешнего обновления базы данных в DataGridView:
Теперь мы начнём писать код для кнопок.
Код для добавления каратистов из таблицы:
Код для редактирования информации о каратистах:
Код для удаления каратистов из базы данных:
Весь код выше работает по алгоритму, который я объяснял выше: идёт соединение с базой данных, выполняется команда, добавляются параметры в эту команду из текстовых полей и далее выводится сообщение.
Как вы заметили везде вызываются 2 метода - DisplayData и ClearData. Вот код для них:
Также надо написать код для метода, который будет вызываться при нажатии на header в DataGridView и будет заполнять текстовые поля. Header - эта та область DataGridView, при нажатии на которую будет выделяться вся информация о каратисте, соответственно эта информация будет добавляться в соответствующие текстовые поля, для удобного редактирования. Выглядит это так:
Но прежде чем добавить этот метод, нам необходимо создать обработчик нажатий (Event Handler). Добавляем его в конструктор нашей формы:
А вот теперь добавляем метод:
Вот и всё! У нас почти готовая программа, тебе надо лишь чуть доработать её и добавить мелкие детали!
Если что, я добавил этот проект к себе в GitHub, поэтому весь код можно посмотреть именно там.
Что мы будем для этого использовать?
- Среда программирования: Visual Studio 2017 (версия не имеет никакого значения)
- Языки: C# - для клиентской части приложения, MySQL - для работы с данными в базе данных нашего приложения
Что будет выполнять приложение?
Наше приложение будет добавлять, изменять, обновлять, удалять и запрашивать данные из базы данных каратистов. "А почему каратистов?" - спросите вы. Так потому что это самая родная для меня тема, вот и будем рассматривать данный пример.Создание проекта
После того, как вы скачали Visual Studio себе на компьютер, вам следует создать проект.Как это сделать?
Создать проект -> Visual C# -> Приложение Windows Forms -> *Выбираем название для проекта и его расположение* -> OK
Теперь у вас готов проект и можно приступать к работе!
Создание форм (Часть 1)
Теперь нам нужно создать графический интерфейс приложения через формы. Добавлять новые формы легко. Просто нажимаете правой кнопкой мыши на свой проект и выбираете "Добавить", как на скриншоте ниже:Далее следует поработать над дизайном наших форм. Не будем сильно изощряться и сделаем максимально минималистичный дизайн:
Главное меню
Меню выбора
Меню выбора для редактирования
Форма для добавления нового пользователя
Так-с. Дальше пока что мы не пойдём, так как для начала нам нужно понять как всё будет работать. У нас есть форма для добавления каратиста, и нам еще нужны формы для создания запросов, для просмотра базы данных и для редактирования её. Но где сама база данных?
Её нет. Поэтому нам нужно немедленно её создать!
Создание базы данных
Переходим во вкладку "Средства" и выбираем "Подключиться к базе данных". Далее открывается окно "Добавить подключение", где в поле "Источник данных" мы выбираем "Файл базы данных Microsoft SQL Server (SqlClient)". Даём любое название файлу базы данных, в нашем случае - "IOGKF_members". Далее нажимаем кнопку "ОК" и в левой стороне экрана видим, как у нас добавилась новая база данных.Раскрываем директорию с нашей базой данных и видим самую первую папку "Таблицы" - она нас и интересует. Жмём по ней правой кнопкой мыши и нажимаем "Добавить новую таблицу".
Можно создать таблицу двумя путями: 1) Конструктором 2) Через SQL код
Если вам лень делать её самим, то скопируйте следующий SQL код и вставьте его в поле с кодом у таблицы:
Код:
CREATE TABLE [dbo].[Members] (
[member_id] INT NOT NULL,
[last_name] VARCHAR (20) NULL,
[first_name] VARCHAR (20) NULL,
[age] INT NULL,
[rank] VARCHAR (3) NULL,
[rank_value] INT NULL,
[sensei] VARCHAR (20) NULL,
[dojo] VARCHAR (20) NULL,
PRIMARY KEY CLUSTERED ([member_id] ASC)
);
Коротко о типах данных в SQL
- varchar - тот же самый String, то есть строка (в скобках пишем её максимальную длину)
- int - целые числа
- binary - тот же самый boolean, то есть True or False, только в SQL - это 1 и 0 соответственно
null - указываем может ли переменная быть пустой, то есть не содержать информации
primary key - первичный ключ, в данном случае это member_id. Таким образом, все значения member_id уникальны
После того как вы создали таблицу, нужно её сохранить. Нажмите ctrl + s или просто закройте файл с таблицей после чего у вас появится сообщение о сохранении таблицы.
Ок, теперь у нас есть база данных и таблица, где будет храниться информация о каратистах.
Создание форм (Часть 2) + код
Давайте напишем программный код для добавления каратистов в нашу базу данных. В моём проекте эта форма называется Form5 (у неё надпись "Add User" в предыдущих скриншотах). В классе этой формы пишем следующее:
Код:
public string conString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30";
Здесь мы создали строковую переменную conString и присвоили ей значение строки подключения базы данных. Чтобы посмотреть вашу строку подключения нажмите правой кнопкой мыши по базе данных и выберите "Свойства":
Теперь два раза нажимаем на кнопку "Add" в конструкторе нашей формы и таким образом открываем код, который будет выполняться при её нажатии. Вот код метода, который выполняется при нажатии:
Код:
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(conString);
con.Open();
if(con.State == System.Data.ConnectionState.Open)
{
string q = "insert into Members(member_id, last_name, first_name," +
" age, rank, rank_value, sensei, dojo)" +
" values('" + textBox1.Text.ToString() + "','" + textBox2.Text.ToString() + "','" + textBox3.Text.ToString() + "','" + textBox4.Text.ToString() + "','" + comboBox2.Text.ToString() + "','" + comboBox1.Text.ToString() + "','" + comboBox3.Text.ToString() + "','" + textBox8.Text.ToString() + "') ";
SqlCommand cmd = new SqlCommand(q, con);
cmd.ExecuteNonQuery();
MessageBox.Show("Connection was successful!");
}
con.Close();
}
Мы создаём объект con типа SqlConnection и если наша база данных подключена к приложению у нас будет выполняться код находящийся под блоком if. Там у нас сохранена SQL команда в строке q, которая позже передаётся в объект cmd типа SqlCommand, который позже выполняет функцию ExecuteNonQuery, которая выполняет данный SQL запрос. После при успешном выполнении в приложении выведется сообщение об успешном добавлении каратиста. Всё достаточно просто!
Кстати, как работают кнопки навигации в приложении, то есть для перехода между формами?
Вот держите пример кода, по этому шаблону они все и работают:
Код:
private void button3_Click(object sender, EventArgs e)
{
this.Visible = false;
Form3 form3= new Form3();
form3.ShowDialog();
}
Далее давайте напишем код для формы с обычным просмотром базы данных. Допустим, что мы уже заполнили базу данных и она должна выглядить так при работе приложения:
Чтобы ��рийти к такому результату нам нужно добавить в нашу форму DataGridView, объект, который будет отображать таблицу. Сделать это очень просто, на скриншоте это видно:
В классе этой формы пишем следующее:
Код:
SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30");
SqlCommand cmd;
SqlDataAdapter adapt;
Что-то наподобии этой строчки у вас должно появиться автоматически в Load методе класса вашей формы:
Код:
this.membersTableAdapter.Fill(this.iOGKF_membersDataSet.Members);
Она заполняет DataGridView данными из таблицы. Теперь в этот же метод Load добавляем эти строчки кода. С помощью них база данных будет постоянно обновляться внешне:
Код:
con.Open();
DataTable dt = new DataTable();
adapt = new SqlDataAdapter("select * from Members", con);
adapt.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
Готово!
А как сделать так, чтобы каратисты показывались по определённым критериям? Здесь нам нужно делать уже SQL запрос, но о них информация будет чуть позже на канале. Создаём новую форму, добавляем DataGridView и несколько текстовых полей. Кто шарит в SQL, тот поймёт в чем смысл этой формы:
Пишем код в метод, который будет выполняться при нажатии на кнопку "Show":
Код:
private void button1_Click(object sender, EventArgs e)
{
string SqlText;
SqlText = "SELECT " + textBox1.Text.ToString() + " FROM Members WHERE " + textBox2.Text.ToString() + " ORDER BY " + textBox3.Text.ToString();
SqlDataAdapter da = new SqlDataAdapter(SqlText, conString);
DataSet ds = new DataSet();
da.Fill(ds, "[Members]");
dataGridView1.DataSource = ds.Tables["[Members]"].DefaultView;
}
В принципе, алгоритм здесь тот же самый, но мы уже создаем отдельный DataSet - коллекцию неупорядоченных данных, которые позже будут отображаться в DataGridView. Сам же DataSet был заполнен теми данными, которые получились от SQL запроса.
Форма готова!
Напоследок осталось одно из самых сложных - сделать форму с редактированием базы данных. Вот, как она выглядит:
Как всегда пишем эти строчки кода в класс формы:
Код:
public string conString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\HP\\Desktop\\IOGKF\\IOGKF\\IOGKF_members.mdf;Integrated Security=True;Connect Timeout=30");
SqlCommand cmd;
SqlDataAdapter adapt;
А это, как я раньше писал, для постоянного внешнего обновления базы данных в DataGridView:
Код:
private void Form7_Load(object sender, EventArgs e)
{
this.membersTableAdapter.Fill(this.iOGKF_membersDataSet.Members);
con.Open();
DataTable dt = new DataTable();
adapt = new SqlDataAdapter("select * from Members", con);
adapt.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
}
Теперь мы начнём писать код для кнопок.
Код для добавления каратистов из таблицы:
Код:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "" && textBox5.Text != "" && textBox6.Text != "" && textBox7.Text != "" && textBox8.Text != "")
{
cmd = new SqlCommand("insert into Members(member_id,last_name,first_name,age,rank,rank_value,sensei,dojo) values(@member_id,@last_name,@first_name,@age,@rank,@rank_value,@sensei,@dojo)", con);
con.Open();
cmd.Parameters.AddWithValue("@member_id", textBox1.Text);
cmd.Parameters.AddWithValue("@last_name", textBox2.Text);
cmd.Parameters.AddWithValue("@first_name", textBox3.Text);
cmd.Parameters.AddWithValue("@age", textBox4.Text);
cmd.Parameters.AddWithValue("@rank", textBox5.Text);
cmd.Parameters.AddWithValue("@rank_value", textBox6.Text);
cmd.Parameters.AddWithValue("@sensei", textBox7.Text);
cmd.Parameters.AddWithValue("@dojo", textBox8.Text);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Record Inserted Successfully");
DisplayData();
ClearData();
}
else
{
MessageBox.Show("Please Provide Details!");
}
}
Код для редактирования информации о каратистах:
Код:
private void button4_Click(object sender, EventArgs e)
{
if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "" && textBox5.Text != "" && textBox6.Text != "" && textBox7.Text != "" && textBox8.Text != "")
{
cmd = new SqlCommand("update Members set member_id=@member_id,last_name=@last_name,first_name=@first_name,age=@age,rank=@rank,rank_value=@rank_value,sensei=@sensei,dojo=@dojo where member_id=@member_id", con);
con.Open();
cmd.Parameters.AddWithValue("@member_id", textBox1.Text);
cmd.Parameters.AddWithValue("@last_name", textBox2.Text);
cmd.Parameters.AddWithValue("@first_name", textBox3.Text);
cmd.Parameters.AddWithValue("@age", textBox4.Text);
cmd.Parameters.AddWithValue("@rank", textBox5.Text);
cmd.Parameters.AddWithValue("@rank_value", textBox6.Text);
cmd.Parameters.AddWithValue("@sensei", textBox7.Text);
cmd.Parameters.AddWithValue("@dojo", textBox8.Text);
cmd.ExecuteNonQuery();
MessageBox.Show("Record Updated Successfully");
con.Close();
DisplayData();
ClearData();
}
else
{
MessageBox.Show("Please Select Record to Update");
}
}
Код для удаления каратистов из базы данных:
Код:
private void button5_Click(object sender, EventArgs e)
{
if (textBox1.Text != null)
{
cmd = new SqlCommand("delete Members where member_id=@member_id", con);
con.Open();
cmd.Parameters.AddWithValue("@member_id", textBox1.Text);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Record Deleted Successfully!");
DisplayData();
ClearData();
}
else
{
MessageBox.Show("Please Select Record to Delete");
}
}
Весь код выше работает по алгоритму, который я объяснял выше: идёт соединение с базой данных, выполняется команда, добавляются параметры в эту команду из текстовых полей и далее выводится сообщение.
Как вы заметили везде вызываются 2 метода - DisplayData и ClearData. Вот код для них:
Код:
private void DisplayData()
{
con.Open();
DataTable dt = new DataTable();
adapt = new SqlDataAdapter("select * from Members", con);
adapt.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
}
private void ClearData()
{
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
}
Также надо написать код для метода, который будет вызываться при нажатии на header в DataGridView и будет заполнять текстовые поля. Header - эта та область DataGridView, при нажатии на которую будет выделяться вся информация о каратисте, соответственно эта информация будет добавляться в соответствующие текстовые поля, для удобного редактирования. Выглядит это так:
Но прежде чем добавить этот метод, нам необходимо создать обработчик нажатий (Event Handler). Добавляем его в конструктор нашей формы:
Код:
public Form7()
{
InitializeComponent();
dataGridView1.RowHeaderMouseClick += new DataGridViewCellMouseEventHandler(OnRowHeaderMouseClick);
}
А вот теперь добавляем метод:
Код:
private void OnRowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
textBox3.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
textBox4.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
textBox5.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString();
textBox6.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString();
textBox7.Text = dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString();
textBox8.Text = dataGridView1.Rows[e.RowIndex].Cells[7].Value.ToString();
}
Вот и всё! У нас почти готовая программа, тебе надо лишь чуть доработать её и добавить мелкие детали!
Если что, я добавил этот проект к себе в GitHub, поэтому весь код можно посмотреть именно там.
Последние темы в этом разделе:
- C# 8.0 Стартовый (2021) [Александр Шевчук]
- [Stepik] Указатели и память С++ (2024)
- Создаём Discord-бота с использованием C# и библиотеки Discord.net
- Алфавит и основные понятия языка C++
- [Яндекс.Практикум] Разработчик C++ [Все Части] (2023)
- [Валентин Кравченко, Роман Сакутин] C# c 0 до профи (2022)
- [Udemy] Структуры данных и алгоритмы на C++ + упражнения LEETCODE (2024)
- [iamtimcorey] Мастер-курс по C# (2023)
- [udemy] Изучайте программирование на C++, создавая игры Learn C++ Programming by Making Games, Volume 1 (2023)
- C# (C Sharp) на примерах из GTA 5 (слив курса с itvdn) [Роман Самчук]