Работа с СУБД MySQL в C#

Работа с СУБД MySQL в C#

Life-Hack

Рассмотрим простенькую задачку. У нас есть сайт, управление, которым осуществляется с помощью 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», на которой приведено полное описание архитектуры базы данных.

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

phpMyAdmin

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

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

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

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

Все поля нас не интересуют, поэтому возьмем только парочку, к примеру, получим значения: автор (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();

}


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

Источник

Report Page