Codeby web-security - новый курс от Codeby Security School

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фазинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...


Работа с базой данных MySQL в C#

Рассмотрим простенькую задачку. У нас есть сайт, управление, которым осуществляется с помощью cms WordPress, а все данные хранятся в базе данных СУБД MySQL. Нужно создать клиентское приложение, которое будет подключаться к базе данных, получать все комментарии за сегодняшний день и выводить их в DataGridView.

Подготовка

Создадим Windows Forms приложение и поместим на форму два элемента управления: кнопку с надписью получить комментарии и datagridview, который будет визуально отображать полученные данные.

окно программы

Для работы с базой данных нам потребуется поставщик данных (data provider), он обеспечивает подключение к БД, позволяет выполнять команды и получать результаты. По сути это обычный файл (.dll), внутри которого содержаться типы, которые настроены на взаимодействие с какой-то одной конкретной СУБД: MySQL, Oracle, Microsoft SQL Server и так далее.

поставщик данных

В Microsoft ADO.NET основное количество поставщиков данных содержится в сборке Sytem.Data.dll, но в этой сборке нет поставщика данных для работы с MySQL. Поэтому его придется скачать и установить самостоятельно. Как это сделать, можно прочитать здесь.

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

И последнее, что нужно узнать, это имя таблицы, в которой хранятся все комментарии. Это можно сделать разными способами, например, зайти на официальный сайт WordPress и найти страницу «Database Description», на которой приведено полное описание архитектуры базы данных.

структура бд WordPress

Либо, к примеру, воспользоваться утилитой phpMyAdmin и вручную осуществить поиск нужной таблицы, остановимся на нём.

phpMyAdmin

И так открываем страницу phpMyAdmin, слева видим список баз данных.

список баз данных

Выбираем в списке базу данных нашего сайта, например mytest и нажимаем на её заголовок. На открывшейся странице мы видим список всех доступных таблиц, среди которых есть таблица wp_comments (wp  это префикс таблиц, у вас он может быть другим), само же имя будет таким же.

список таблиц

Посмотрим, что содержится в данной таблице. Для этого нажимаем на значок с именем Browse.

значок

В открывшемся окне мы видим состав таблицы, а так же какие-то ранее занесенные в неё данные, которые нам как раз и нужно будет получить.


Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


таблица с комментариями

Все поля нас не интересуют, поэтому возьмем только парочку, к примеру, получим значения: автор (comment_author), дата (comment_date) и сам текст комментария (comment_content).

Переходим к написанию кода.

Исходный код

Для начала создадим метод GetComments, который будет возвращать объект DataTable. Так как по умолчанию созданный метод имеет модификатор доступа private, то его можно не указывать явно.

DataTable GetComments()
{
}

Затем настроим подключение к базе данных

1. Создадим и заполним объект MySqlConnectionStringBuilder, который будет хранить следующие значения: имя сервера, где лежит база данных, имя пользователя и пароль для подключения к БД, а так же имя базы данных.

Либо Вы можете создать конфигурационный файл и все данные подключения вынести в него, подробный пример будет приведён в следующей статье.

MySqlConnectionStringBuilder mysqlCSB;
mysqlCSB = new MySqlConnectionStringBuilder();
mysqlCSB.Server = "ip адрес сервера";
mysqlCSB.Database = "имя БД";
mysqlCSB.UserID = "имя пользователя";
mysqlCSB.Password = "пароль";

2. Создадим строку запроса, в ней мы выбираем все комментарии за сегодняшний день.

string queryString = @"SELECT comment_author,
comment_date,
comment_content 
FROM   wp_comments 
WHERE  comment_date >= CURDATE()";

3. Создадим объект DataTable, который будет возвращать наш метод и принимать datagridView.

DataTable dt = new DataTable();

4. Создадим объект подключения, используя класс MySqlConnection.

using(MySqlConnection con = new MySqlConnection())
{
}

4.1 Настроим созданный объект, передав в свойство ConnectionString наш созданный ранее объект типа MySqlConnectionStringBuilder.

con.ConnectionString = mysqlCSB.ConnectionString;

5. Открываем соединение с базой данных

con.Open();

6. Создаем объект команду, в конструктор передаем строку запроса и объект подключения

MySqlCommand com = new MySqlCommand(queryString, con);

7. Выполним метод ExecuteReader, который позволит получить объект чтения данных MySqlDataReader

using(MySqlDataReader dr = com.ExecuteReader())
{
//есть записи?
if (dr.HasRows)
{
//заполняем объект DataTable
dt.Load(dr);
}
}

Полный листинг

using MySql.Data.MySqlClient; //Добавить
private DataTable GetComments()
{
DataTable dt = new DataTable();
MySqlConnectionStringBuilder mysqlCSB;
mysqlCSB = new MySqlConnectionStringBuilder();
mysqlCSB.Server = "127.0.0.1";
mysqlCSB.Database = "mytest";
mysqlCSB.UserID = "root";
mysqlCSB.Password = "123";
string queryString = @"SELECT comment_author,
comment_date,
comment_content
FROM   wp_comments
WHERE  comment_date >= CURDATE()";
using (MySqlConnection con = new MySqlConnection())
{
con.ConnectionString = mysqlCSB.ConnectionString;
MySqlCommand com = new MySqlCommand(queryString, con);
try
{
con.Open();
using(MySqlDataReader dr = com.ExecuteReader())
{
if (dr.HasRows)
{
 dt.Load(dr);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
return dt;
}

Осталось поместить полученные данные в datagridView.

private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = GetComments();
}

На этом всё, осталось протестировать наше приложение. Нажимаем на кнопку получить комментарии, и видим результат.

результат

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


Codeby Market от Сodeby

Мы запустили свой магазин CodebyMarket Equipment for InfoSec. Уже добавили RaspberryAlfa Long-RangeOrange PiArduino и многое другое. Купить Pentesting Devices