• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Добавление новой записи в базу данных Mysql

Из этой статьи Вы узнаете, как добавить новую запись в базу данных Mysql. Вопрос о добавление данных очень часто задают в комментариях, поэтому я решил написать небольшую статью, в которой хочу на простом примере показать Вам, как можно быстро решить данную задачу.

Подготовка

И так для начала создадим Windows Forms приложение, затем добавим на форму две кнопки, с помощью первой мы будем добавлять новые записи в базу данных Mysql, а с помощью второй получать их. Так же добавим на форму элемент управления DataGridView, в который будет выводить полученные данные.

29708


Каркас приложения создан, и теперь можно переходить к основной теме статьи. И так предположим, что у нас есть база данных «test», которая имеет всего одну таблицу «friends», которая состоит из четырёх колонок: id, name, lastname, age. В качестве задачи нам нужно добавить в эту таблицу одну или несколько записей из клиентского приложения, написанного на языке c#

29709


Для того чтобы мы смогли подключиться и начать работать с базой данных Mysql, нам необходимо установить и добавить в проект MySQL Connector.

Затем создадим метод insertData, с помощью которого мы будет добавлять новые записи в базу данных Mysql.
Код:
private void insertData()
{
}
На этом подготовительная часть заканчивается, переходим к написанию кода.

Добавление новой записи

Чтобы Вы лучше поняли весь процесс работы, сначала выполним все действия от начала и до конца по шагам, а в конце статьи я добавлю весь исходник целиком. И так начнём.

Шаг 1. Создаём строку подключения к базе данных Mysql. В качестве параметров указываем: имя или сетевой адрес Mysql сервера, имя пользователя базы данных Mysql, название базы данных и пароль.
Код:
string conStr = "server=127.0.0.1;user=root;" +
"database=test;password=123;";
Шаг 2. Используя оператора INSERT INTO, создаём строку запроса, которая позволяет добавить новую запись в таблицу. Обратите внимание, так как колонка id имеет атрибут AUTO_INCREMENT, то в запросе мы её не указываем, так как нужные значения будет подставлены автоматически.
Код:
string sql = "INSERT INTO friends (name, lastname, age)" +
"VALUES ('Misha', 'Ivanov', 26)";
Но, чаще всего вместо пустого значения в sql запросе передают значение NULL.
Код:
string sql = "INSERT INTO friends (id, name, lastname, age)" +
"VALUES (null, 'Misha', 'Ivanov', 26)";
В целях безопасности старайтесь не использовать в своих приложениях обычные строки запросов, вместо них лучше использовать хранимые процедуры, либо параметризованные запросы.

Шаг 3. Создаем команду, которая используется для отправки sql запроса на сервер, в качестве параметров передаем: строку запроса и строку подключения.
Код:
MySqlCommand cmd = new MySqlCommand(sql, con);
Шаг 4. Открываем соединение с базой данных Mysql.
Код:
con.Open();
Шаг 5. С помощью метода ExecuteNonQuery выполняем команду и добавляем запись в таблицу.
Код:
cmd.ExecuteNonQuery();
Данный метод ничего не возвращает, поэтому если Вам необходимо убедиться в том, что запись действительно была добавлена, Вы можете воспользоваться, например функцией Last Insert ID и в качестве результата получить id последней добавленной записи.
Код:
string queryString = "INSERT INTO имя таблицы (столбцы)" +
"VALUES (значения);" +
"SELECT LAST_INSERT_ID();";
int lastID = Convert.ToInt32(cmd.ExecuteScalar());
Полный листинг
Код:
private void insertData()
{
string conStr = "server=127.0.0.1;user=root;" +
"database=test;password=123;";
using (MySqlConnection con = new MySqlConnection(conStr))
{
try
{
string sql = "INSERT INTO friends (name, lastname, age)" +
"VALUES ('Misha', 'Ivanov', 26)";
MySqlCommand cmd = new MySqlCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Данные добавлены!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Вызов метода
Код:
private void button1_Click(object sender, EventArgs e)
{
insertData();
}
Результат:

29710


Осталось получить данные из базы данных Mysql и вывести их в окно DataGridView.

29711


Добавление новой записи с помощью параметризованного запроса

В конце этой статьи хотелось бы показать ещё один простой пример, в котором мы создадим так называемый параметризованный запрос. Как уже было упомянуто, sql запрос такого типа является более предпочтительным и более безопасным при работе с базами данных.
Код:
private void insertData()
{
string conStr = "server=127.0.0.1;user=root;" +
"database=test;password=123;";
using (MySqlConnection con = new MySqlConnection(conStr))
{
try
{
string sql = "INSERT INTO friends (name, lastname, age)" +
"VALUES (@Name, @LastName, @Age);";
con.Open();
MySqlCommand cmd = new MySqlCommand(sql, con);
//создаем параметры и добавляем их в коллекцию
cmd.Parameters.AddWithValue("@Name", "Vasya");
cmd.Parameters.AddWithValue("@LastName", "Pupkin");
cmd.Parameters.AddWithValue("@Age", 18);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Вот собственно и всё, если есть какие-то вопросы, то оставляйте их в комментариях.

Читайте также:
 
  • Нравится
Реакции: Vertigo

Сергей Попов

Кодебай
30.12.2015
4 693
6 587
BIT
344
СЕРГЕЙ
14.09.2016 в 01:25
День добрый!
Интересует такой вопрос: каким образом проще всего организовать хранение данных и настроек программы без использования бд? Не хочется привязываться к MySQL или Access ..

ADMIN
14.09.2016 в 22:14
Здравствуйте!

Properties.Settings
App.Config
XML файл
сериализация
Попробуйте выбрать что-нибудь из этого из списка.

НИКОЛАЙ
16.09.2016 в 02:28
Здравствуйте, как удалить выделенную строку в dataGridVIew из dataGridVIew и phpMyAdmin.

ADMIN
16.09.2016 в 20:30
удаление строки в DataGridView

phpMyAdmin? Это лишь оболочка для работы с базой данных, можете пояснить?

НИКОЛАЙ
18.09.2016 в 02:24
нужно что бы выделенная строка удалялась из DataGridView и из базы данных.

ADMIN
19.09.2016 в 07:00
Как удалить строку в базе данных Mysql — добавил статью.

НИКОЛАЙ
20.09.2016 в 09:20
Спасибо огромное.

ДИМА
20.09.2016 в 10:24
Здравствуйте, а можно данный способ реализовать не через DataGridView, а через ComboBox? Если да, то как? Спасибо.

ADMIN
22.09.2016 в 03:21
Привет. Пример: Как получить данные из DataTable

ГЕННАДИЙ
22.09.2016 в 18:25
почему мне в базу данных вноситься такой текст System.Windows.Forms.TextBox, Text: ге

К стате вот это (ге) к конце это написано гена хоть в настройках таблицы указан текст .слово гена должно было уместиться дальше я вывожу эту таблицу в свою программку и получается что он выводит мне весь этот ненужный текст

ADMIN
24.09.2016 в 04:17
Скорее всего неверно написан SQL запрос, например:

В textBox1 вводим имя: Гена.
Код:
Sql запрос: «Insert into имя таблицы values(textBox1, ..)»;
Результат: System.Windows.Forms.TextBox
А нужно передавать: «Insert into имя таблицы values(textBox1.Text, ..)»;
Результат: Гена

ГЕННАДИЙ
24.09.2016 в 18:41
Да так оно и есть . СПасибо

СЕРГЕЙ
25.09.2016 в 11:51
Здравствуйте. А как реализовать добавление в БД через textBox?

ADMIN
26.09.2016 в 20:53
Всё тоже самое в принципе. Например, возьмём самый последний пример, в нём нужно:
Код:
//создаем параметры и добавляем их в коллекцию
cmd.Parameters.AddWithValue("@Name", textBox1.Text);
cmd.Parameters.AddWithValue("@LastName", textBox2.Text);
теперь параметры: Name и LastName получают значения введенные в textbox-ы и передают их в БД

ЛИНАРА
27.09.2016 в 17:45
Здравствуйте, как выделенную строку в dataGridVIew и phpMyAdmin?

ADMIN
29.09.2016 в 02:06
Я не знаю, как можно выделенную строку в phpMyAdmin. А в dataGridView, например это можно сделать с помощью события SelectionChanged.

PSH
30.09.2016 в 03:48
2Линара:
Если так хотите редактировать строки, возьмите инструмент а-ля HediSQL, настройте и изменяйте строки.

2admin
Доброго дня! Спасибо за материлы — всё очень круто изложено)
Вопрос: добавляю данные вот таким запросом (он тестовый):

Код:
string sql = "INSERT INTO users (`FIO`, `Tour`, `Count`, `Cost`, `Date`, `Passport`, `Birth`)
VALUES ('Колян', 'Москва', '1+1', 1100, '2011-11-11', '1111 1111', '9.11.1900');";
Данные вносятся всё ок, но вот в БД (mysql) вместо кириллицы оказываются «????».

Visual studio говорит, что System.String — последовательность Юникода.
В БД (и в таблице) сопоставление utf_general_ci
Также пробовал:
Код:
ALTER DATABASE `test` COLLATE 'koi8r_general_ci';
ALTER TABLE `users`   COLLATE='koi8r_general_ci';
ALTER DATABASE `test` COLLATE 'utf8_unicode_ci';
ALTER TABLE `users`   COLLATE='utf8_unicode_ci';
Но не помогает..
В чем может быть дело? Разные кодирвки VS и БД ? Или что?
Могли бы направить что почитать/поменять.
Спасибо

ADMIN
01.10.2016 в 09:49
Привет.

В БД (и в таблице) сопоставление utf_general_ci

Такое сопоставление разве есть? Возможно, utf8_general_ci?

Обычно создают БД Mysql выбирая сравнение utf8_general_ci, поэтому проблем с кириллицей не возникает, если конечно с клиента не приходят кракозябры на сервер.

COLLATION используется для сравнения, а в данном же случаи важна кодировка (charset). Поэтому для начала необходимо убедиться, что она выставлена на сервере верно, например в utf8, а не latin1.

При подключении через .net коннектор (по умолчанию) используется latin1, поэтому иногда требуется явно указать в строке подключения кодировку utf8:
Код:
MySqlConnection mycon;
mycon = new MySqlConnection("server=127.0.0.1;uid=vasya;pwd=123;database=test;Charset=utf8;");
//MySqlConnectionStringBuilder:
mysqlCSB.CharacterSet = "utf8";
PSH
01.10.2016 в 11:34
Вы правы, описался, utf8_general_ci!
Да помогло, ;Charset=utf8;
Спасибо огрмное!

СЕРГИЙ
02.10.2016 в 11:02
Спасибо за рабочий пример, нужный. Вопрос
Я создал текстовое поле в которое хотел бы вводить айпи-адрес базы данных, но не знаю как подставить эти данные вот сюда

string conStr = "server=@textBox2;user=test;" +
"database=test;password=test;";
Подскажите пожалуйста как вставлять данные из текстовых полей в windows form в эту конструкцию….

ADMIN
03.10.2016 в 11:50
"server=@textBox2.Text;user=...
Вообще лучше вместо такой строки использовать свойства, как в данной статье, либо метод String.Format()

OLGA2203
15.05.2017 в 20:14
Код:
string Connect = “Server=127.0.0.1;Port=3306;Database=base;Data Source=localhost;user=root;”;
MySqlConnection con = new MySqlConnection(Connect);
con.Open(); //Устанавливаем соединение с базой данных.
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = @”INSERT INTO tovar(ID,Category,Name,TradeMark,Price,Photo,Size,Color,Material,Count)
VALUES ( @pr, @Category, @Name, @TradeMark, @Price, @Photo, @Size, @Color, @Material, @Count )”;
cmd.Parameters.AddWithValue(“@pr”,counter);
cmd.Parameters.AddWithValue(“@Category”, comboBox1.SelectedItem.ToString());
cmd.Parameters.AddWithValue(“@Name”, textBox1.Text);
cmd.Parameters.AddWithValue(“@TradeMark”, textBox2.Text);
cmd.Parameters.AddWithValue(“@Price”, Convert.ToInt32(textBox4.Text));
cmd.Parameters.AddWithValue(“@Photo”, textBox3.Text);
cmd.Parameters.AddWithValue(“@Size”, textBox6.Text);
cmd.Parameters.AddWithValue(“@Color”, textBox5.Text);
cmd.Parameters.AddWithValue(“@Material”, textBox8.Text);
cmd.Parameters.AddWithValue(“@Count”, Convert.ToInt32(textBox7.Text));
cmd.Connection = con;
cmd.ExecuteNonQuery();
MessageBox.Show(“Добавление прошло успешно”, “Добавление прошло успешно”, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
Выдается ошибка “Column ‘ID’ cannot be null”, убираю добавление в столбец ID – то же самое про следующий столбец пишет и т.д.
Если вношу какие-нибудь константные значения в скобках в VALUES, строка в базу добавляется.
Подскажите, пожалуйста, в чем проблема? Мне нужно записывать в базу данных именно вводимые через форму данные и значения
 
  • Нравится
Реакции: Vertigo
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!