Mysql метод ExecuteReader
В этой статье хочу показать на простом примере, как можно получить данные из базы данных Mysql с помощью метода ExecuteReader.
И так предположим, что у нас есть база данных notebook, которая содержит всего одну таблицу Friends. Данная таблица состоит из трёх столбов: id, name, age и уже содержит несколько записей.
В качестве задачи рассмотрим, как с помощью метода ExecuteReader получить все значения из колонки name в таблице Friends и вывести полученный результат в элемент управления TextBox.
Подготовка
1. Создадим новый проект типа Windows Forms Application
2. Добавим на форму: кнопку и текстовое поле (textbox).
3. Для поля textBox установим свойство Multiline в значение true.
4. Для работы с базой данных Mysql потребуется установить MySQL Connector.
5. Создадим новый метод GetAllNames, с помощью которого мы получим все имена, которые содержаться в колонке Name таблицы Friends.
6. Добавим в тело метода следующий код:
7. На форме выберите кнопку и подпишитесь на событие Click. В обработчике события Button_Click поместите код для вызова метода GetAllNames и вывода данных в текстовое поле:
результат
В принципе значение Multiline можно не менять, тогда вместо метода AppendLine используйте метод Append (sb.Append).
Более подробно о том, как работать с базой данных Mysql, можно прочитать, перейдя по ссылке. В этой же статье мы более подробно рассмотрим лишь только ту часть кода, которая отвечает за получение данных из базы данных Mysql и вывод.
Работа метода ExecuteReader
За получение данных из базы данных Mysql отвечает следующая часть кода:
В первой строке кода с помощью метода ExecuteReader создаётся новый объект типа MySqlDataReader и происходит отправка запроса к базе данных Mysql.
Обычно результат запроса возвращается в объект MySqlDataReader. В данном примере в качестве результата запроса мы получаем таблицу, состоящую из одного колонки Name.
Так как мы создали новый объект на основе метода ExecuteReader, то в результате мы получили возможность только читать данные из полученной таблицы результатов.
Обратите внимание на то, что чтение строк выполняется только при установленном соединении с базой данных Mysql и только в прямом направлении (то есть по порядку сверху вниз) это значит, что произвольно перемещаться по таблице вы не можете.
Как происходит чтение данных?
Объект MySqlDataReader содержит метод Read, который позволяет нам управлять курсором, который в свою очередь позволяет перемещаться по таблице результатов (сверху вниз).
По умолчанию курсор установлен перед самой первой записью в таблице.
Во время выполнения цикла курсор опускается по порядку к каждой записи в таблице, в результате этого, поочередно, каждая строка становиться выбранной, и мы получаем возможность прочитать и получить из неё интересующие нас данные.
Чтобы получить значение из выбранной строки вы должны указать либо индекс интересующего вас столбца или его имя, например, получить имя друга можно двумя способами:
В обоих случаях мы получим одинаковый результат.
Для увеличения производительности операции связанные с чтением рекомендуется использоваться специальные типизированные методы, например такие как: GetInt16, GetInt32, GetString и другие, например:
Так же в данный момент Вы можете использовать свойство FieldCount, которое позволяет определить количество полей в выбранной строке, например:
Получили единицу, потому что в нашей результирующей таблице содержится только одно поле Name.
Если мы изменим sql запрос:
Результат: 3
Но, не стоит забывать, что при обращении к колонке нужно указать её индекс. Для первой колонки он всегда равен нулю, а для последней будет равен (общее количество столбцов — 1).
После получения последней записи процесс чтения данных завершается. Теперь Вы должны закрыть объект MySqlDataReader с помощью метода Close, например:
Но, так как MySqlDataReader реализует интерфейс IDisposable и у него есть метод Dispose, то мы можем использовать using для того, чтобы автоматически закрыть объект чтения и затем удалить его, как например, в нашем основном примере.
Все полученные данные из таблицы мы помещаем в объект типа StringBuilder — это позволяет экономично работать с память при работе со строками.
В этой статье хочу показать на простом примере, как можно получить данные из базы данных Mysql с помощью метода ExecuteReader.
И так предположим, что у нас есть база данных notebook, которая содержит всего одну таблицу Friends. Данная таблица состоит из трёх столбов: id, name, age и уже содержит несколько записей.
В качестве задачи рассмотрим, как с помощью метода ExecuteReader получить все значения из колонки name в таблице Friends и вывести полученный результат в элемент управления TextBox.
Подготовка
1. Создадим новый проект типа Windows Forms Application
2. Добавим на форму: кнопку и текстовое поле (textbox).
3. Для поля textBox установим свойство Multiline в значение true.
4. Для работы с базой данных Mysql потребуется установить MySQL Connector.
5. Создадим новый метод GetAllNames, с помощью которого мы получим все имена, которые содержаться в колонке Name таблицы Friends.
C#:
private string GetAllNames()
{
}
6. Добавим в тело метода следующий код:
C#:
private string GetAllNames()
{
StringBuilder sb = new StringBuilder();
MySqlConnectionStringBuilder mysqlCSB;
mysqlCSB = new MySqlConnectionStringBuilder();
mysqlCSB.Server = "127.0.0.1";
mysqlCSB.Database = "notebook";
mysqlCSB.UserID = "admin";
mysqlCSB.Password = "123";
string queryString = "SELECT name FROM Friends";
try
{
using (MySqlConnection con = new MySqlConnection())
{
con.ConnectionString = mysqlCSB.ConnectionString;
con.Open();
using(MySqlCommand com = new MySqlCommand(queryString,con))
{
using (MySqlDataReader rd = com.ExecuteReader())
{
while (rd.Read())
{
sb.AppendLine(rd.GetString("Name"));
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return sb.ToString();
}
7. На форме выберите кнопку и подпишитесь на событие Click. В обработчике события Button_Click поместите код для вызова метода GetAllNames и вывода данных в текстовое поле:
C#:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = GetAllNames();
}
результат
В принципе значение Multiline можно не менять, тогда вместо метода AppendLine используйте метод Append (sb.Append).
Более подробно о том, как работать с базой данных Mysql, можно прочитать, перейдя по ссылке. В этой же статье мы более подробно рассмотрим лишь только ту часть кода, которая отвечает за получение данных из базы данных Mysql и вывод.
Работа метода ExecuteReader
За получение данных из базы данных Mysql отвечает следующая часть кода:
C#:
using (MySqlDataReader rd = com.ExecuteReader())
{
while (rd.Read())
{
}
}
В первой строке кода с помощью метода ExecuteReader создаётся новый объект типа MySqlDataReader и происходит отправка запроса к базе данных Mysql.
Обычно результат запроса возвращается в объект MySqlDataReader. В данном примере в качестве результата запроса мы получаем таблицу, состоящую из одного колонки Name.
Так как мы создали новый объект на основе метода ExecuteReader, то в результате мы получили возможность только читать данные из полученной таблицы результатов.
Обратите внимание на то, что чтение строк выполняется только при установленном соединении с базой данных Mysql и только в прямом направлении (то есть по порядку сверху вниз) это значит, что произвольно перемещаться по таблице вы не можете.
Как происходит чтение данных?
Объект MySqlDataReader содержит метод Read, который позволяет нам управлять курсором, который в свою очередь позволяет перемещаться по таблице результатов (сверху вниз).
По умолчанию курсор установлен перед самой первой записью в таблице.
Во время выполнения цикла курсор опускается по порядку к каждой записи в таблице, в результате этого, поочередно, каждая строка становиться выбранной, и мы получаем возможность прочитать и получить из неё интересующие нас данные.
Чтобы получить значение из выбранной строки вы должны указать либо индекс интересующего вас столбца или его имя, например, получить имя друга можно двумя способами:
C#:
while (rd.Read())
{
//ноль - это индекс колонки Name
textBox.Text = rd[0].ToString();
//textBox.Text = rd["Name"];
}
Для увеличения производительности операции связанные с чтением рекомендуется использоваться специальные типизированные методы, например такие как: GetInt16, GetInt32, GetString и другие, например:
C#:
textBox1.Text = rd.GetString("Name");
C#:
while (rd.Read())
{
int cntFlds = rd.FieldCount; //1
}
Если мы изменим sql запрос:
C#:
string queryString = "SELECT * FROM friends";
Но, не стоит забывать, что при обращении к колонке нужно указать её индекс. Для первой колонки он всегда равен нулю, а для последней будет равен (общее количество столбцов — 1).
После получения последней записи процесс чтения данных завершается. Теперь Вы должны закрыть объект MySqlDataReader с помощью метода Close, например:
C#:
MySqlDataReader rd = com.ExecuteReader();
while (rd.Read())
{
//какие-то действия
}
rd.Close();
Все полученные данные из таблицы мы помещаем в объект типа StringBuilder — это позволяет экономично работать с память при работе со строками.