Добро пожаловать! Игровой форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы на существующие темы, повышать репутацию участников, скачивать вложения и файлы и многое, многое другое. Так чего же вы ждете?

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

Мы уважаем своих пользователей и так же ждем от вас приятного общения.

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

У нас вы можете скачать бесплатно читы для игр. Полезные гайды на любые темы и схемы заработка. Есть раздел халявы!

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываються в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки работают только с Администрацией форума

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

C# Гайд Приложение на C# + связка с MySQL базой данных

wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
23 849
218
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
В этом мини-туториале мы с вами с нуля напишем десктопное приложение на С#, которое будет работать с базой данных.

Что мы будем для этого использовать?​

  • Среда программирования: Visual Studio 2017 (версия не имеет никакого значения)
  • Языки: C# - для клиентской части приложения, MySQL - для работы с данными в базе данных нашего приложения

Что будет выполнять приложение?​

Наше приложение будет добавлять, изменять, обновлять, удалять и запрашивать данные из базы данных каратистов. "А почему каратистов?" - спросите вы. Так потому что это самая родная для меня тема, вот и будем рассматривать данный пример.

Создание проекта​

После того, как вы скачали Visual Studio себе на компьютер, вам следует создать проект.

Как это сделать?

Создать проект -> Visual C# -> Приложение Windows Forms -> *Выбираем название для проекта и его расположение* -> OK

Теперь у вас готов проект и можно приступать к работе!

Создание форм (Часть 1)​

Теперь нам нужно создать графический интерфейс приложения через формы. Добавлять новые формы легко. Просто нажимаете правой кнопкой мыши на свой проект и выбираете "Добавить", как на скриншоте ниже:
d8168e2d-d01f-4059-916a-ed2f12f09b0b.png

Далее следует поработать над дизайном наших форм. Не будем сильно изощряться и сделаем максимально минималистичный дизайн:

Главное меню
23f73555-883f-48bb-a609-9d07e45e6e86.png

Меню выбора
a1a8e70b-88b8-4ef3-9f4b-55dc3cc01517.png

Меню выбора для редактирования


a1510557-fedf-440b-bd09-10c64d167a32.png

Форма для добавления нового пользователя
20cf25f3-3ea9-47c9-b468-5251ec57cab3.png

Так-с. Дальше пока что мы не пойдём, так как для начала нам нужно понять как всё будет работать. У нас есть форма для добавления каратиста, и нам еще нужны формы для создания запросов, для просмотра базы данных и для редактирования её. Но где сама база данных?

Её нет. Поэтому нам нужно немедленно её создать!


Создание базы данных​

Переходим во вкладку "Средства" и выбираем "Подключиться к базе данных". Далее открывается окно "Добавить подключение", где в поле "Источник данных" мы выбираем "Файл базы данных Microsoft SQL Server (SqlClient)". Даём любое название файлу базы данных, в нашем случае - "IOGKF_members". Далее нажимаем кнопку "ОК" и в левой стороне экрана видим, как у нас добавилась новая база данных.
a9fad739-7ff4-4d57-8b64-aa2a4c5792d0.png

Раскрываем директорию с нашей базой данных и видим самую первую папку "Таблицы" - она нас и интересует. Жмём по ней правой кнопкой мыши и нажимаем "Добавить новую таблицу".

Можно создать таблицу двумя путями: 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 и присвоили ей значение строки подключения базы данных. Чтобы посмотреть вашу строку подключения нажмите правой кнопкой мыши по базе данных и выберите "Свойства":

6f7237ca-1172-4e2d-a5cb-b68f5a8744d8.png

Теперь два раза нажимаем на кнопку "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();
        }

Далее давайте напишем код для формы с обычным просмотром базы данных. Допустим, что мы уже заполнили базу данных и она должна выглядить так при работе приложения:

49e2067b-4465-4345-9b2a-46accd2f04cc.png

Чтобы ��рийти к такому результату нам нужно добавить в нашу форму DataGridView, объект, который будет отображать таблицу. Сделать это очень просто, на скриншоте это видно:
74189535-ed47-4412-8c25-b01211a8168d.png

В классе этой формы пишем следующее:
Код:
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, тот поймёт в чем смысл этой формы:
4e361366-93ed-4cf6-af57-15ed967a4a68.png

Пишем код в метод, который будет выполняться при нажатии на кнопку "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 запроса.

Форма готова!

Напоследок осталось одно из самых сложных - сделать форму с редактированием базы данных. Вот, как она выглядит:

42cf8c42-c699-437a-a499-95b28b9c1647.png

Как всегда пишем эти строчки кода в класс формы:

Код:
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, при нажатии на которую будет выделяться вся информация о каратисте, соответственно эта информация будет добавляться в соответствующие текстовые поля, для удобного редактирования. Выглядит это так:
9f8b583b-b689-4475-ae79-f83847f0dd14.png

Но прежде чем добавить этот метод, нам необходимо создать обработчик нажатий (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, поэтому весь код можно посмотреть именно там.

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

 
N Оффлайн

NoobKekW

Местный
Участник
LV
3
 
16.01.2023
35
0
25
Награды
4

Репутация:

Напоминает лабы за второй курс вуза, но если бы преподы были нормальными
Спасибо!
 
L Оффлайн

lexw6

Участник
LV
3
 
19.01.2023
5
0
25
Награды
3
29

Репутация:

Спасибо огромное! Отлично объясняешь. С удовольствием бы посмотрел еще гайды от тебя
 
G Оффлайн

guacamolli

Участник
LV
3
 
30.12.2022
3
0
24
Награды
3
21

Репутация:

Очень крутой гайд спс
 
Z Оффлайн

zloppit

Местный
Участник
LV
2
 
24.09.2023
54
0
22
Награды
3
24

Репутация:

Крутейший гайд, спасиб большое
 
E Оффлайн

Eugene dada

Местный
Участник
LV
2
 
12.04.2024
36
0
30
Награды
3
23

Репутация:

Почему тебя не было тогда, когда мне это нужно было учить... спасибо!
 
R Оффлайн

romtom

Участник
LV
2
 
08.04.2024
11
0
25
Награды
2
24

Репутация:

как раз 2 курс в университете пригодится
 
G Оффлайн

gggggf

Участник
LV
3
 
08.04.2024
7
0
24
Награды
3
27

Репутация:

Спасибо! Подскажите, как часто устаревает материал? Часто ли обновления в языке?
 

Поиск по форуму

Похожие темы:

shape1
shape2
shape3
shape4
shape7
shape8
Верх