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

Как добавить новую запись в базу данных Mysql?

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

Подготовка

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

1

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

структура таблицы

Для того чтобы мы смогли подключиться и начать работать с базой данных 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();
}

Результат:

добавленная запись

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

данные из таблицы

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

В конце этой статьи хотелось бы показать ещё один простой пример, в котором мы создадим так называемый параметризованный запрос. Как уже было упомянуто, 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);
}
}
}

Вот собственно и всё, если есть какие-то вопросы, то оставляйте их в комментариях.

Читайте также:

21 комментарий

  1. Сергей says:

    День добрый!
    Интересует такой вопрос: каким образом проще всего организовать хранение данных и настроек программы без использования бд? Не хочется привязываться к MySQL или Access ..

  2. Здравствуйте!

    Попробуйте выбрать что-нибудь из этого из списка.

  3. Николай says:

    Здравствуйте, как удалить выделенную строку в dataGridVIew из dataGridVIew и phpMyAdmin.

  4. удаление строки в DataGridView

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

  5. Николай says:

    нужно что бы выделенная строка удалялась из DataGridView и из базы данных.

  6. Николай says:

    Спасибо огромное.

  7. Дима says:

    Здравствуйте, а можно данный способ реализовать не через DataGridView, а через ComboBox? Если да, то как? Спасибо.

  8. Геннадий says:

    почему мне в базу данных вноситься такой текст System.Windows.Forms.TextBox, Text: ге

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

  9. Скорее всего неверно написан SQL запрос, например:

    В textBox1 вводим имя: Гена.

    Sql запрос: «Insert into имя таблицы values(textBox1, ..)»;
    Результат: System.Windows.Forms.TextBox

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

  10. Геннадий says:

    Да так оно и есть . СПасибо

  11. Сергей says:

    Здравствуйте. А как реализовать добавление в БД через textBox?

  12. Всё тоже самое в принципе. Например, возьмём самый последний пример, в нём нужно изменить:

    //создаем параметры и добавляем их в коллекцию
    cmd.Parameters.AddWithValue("@Name", textBox1.Text);
    cmd.Parameters.AddWithValue("@LastName", textBox2.Text);

    теперь параметры: Name и LastName получают значения введенные в textbox-ы и передают их в БД

  13. Линара says:

    Здравствуйте, как изменить выделенную строку в dataGridVIew и phpMyAdmin?

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

  15. 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 и БД ? Или что?
    Могли бы направить что почитать/поменять.
    Спасибо

  16. Привет.

    В БД (и в таблице) сопоставление 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";
  17. Вы правы, описался, utf8_general_ci!
    Да помогло, ;Charset=utf8;
    Спасибо огрмное!

  18. Сергий says:

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

    string conStr = "server=@textBox2;user=test;" +
    "database=test;password=test;";

    Подскажите пожалуйста как вставлять данные из текстовых полей в windows form в эту конструкцию….

  19. "server=@textBox2.Text;user=...

    Вообще лучше вместо такой строки использовать свойства, как в данной статье, либо метод String.Format()

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*