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

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


Mysql метод ExecuteScalar

Метод ExecuteScalar класса MySqlCommand обычно используется в том случаи, когда необходимо выполнить запрос к базе данных Mysql и вернуть какое-то одно единственное значение.

Например, предположим, что у нас есть база данных company, которая содержит всего одну таблицу users состоящую из двух колонок: id и name.

таблица

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

using MySql.Data.MySqlClient; //Добавить
private int GetNumberOfRecords()
{
int cntRcrds = 0;
MySqlConnectionStringBuilder mysqlCSB;
mysqlCSB = new MySqlConnectionStringBuilder();
mysqlCSB.Server = "127.0.0.1";
mysqlCSB.Database = "company";
mysqlCSB.UserID = "adminbd";
mysqlCSB.Password = "123";
string queryString = "SELECT COUNT(*) FROM users";
try
{
using(MySqlConnection con = new MySqlConnection())
{
con.ConnectionString = mysqlCSB.ConnectionString;
con.Open();
using(MySqlCommand com = new MySqlCommand(queryString,con))
{
cntRcrds = Convert.ToInt32(com.ExecuteScalar());
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return cntRcrds;
}

Более подробно о том, как работать с базой данных Mysql, можно прочитать, перейдя по ссылке.

Обратите внимание на то, что полученный результат имеет тип object, который затем преобразовывается в тип int.

Очень часто здесь допускают ошибку, используя следующую запись:


Paranoid - курс от Codeby Security School

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


cntRcrds = (int)com.ExecuteScalar();

Такой способ преобразования не стоит использовать, так как если в указанной таблице не будет ни одной записи, то тогда в результате будет получено значение null, которое при попытке конвертирования к типу int будет приводить к возникновению исключения.

Лучше использовать метод ToInt32 класса Convert, который позволяет без каких-либо проблем преобразовать полученное значение null в значение ноль. В результате в переменной (cntRcrds) всегда будут только числа.

Вызов метода GetNumberOfRecords:

private void button1_Click(object sender, EventArgs e)
{
int countRecords = GetNumberOfRecords();
}

Результат: 6.

Рассмотрим ещё один пример, в котором мы выполним выборку имен пользователей по заданному условию:

string queryString = "SELECT * FROM users WHERE name LIKE '%ша'";

Результатом выполнения метода ExecuteScalar является значение первого столбца первой строки результирующего набора.

То есть в данном примере сначала отправляется запрос к базе данных Mysql, потом делается выборка с указанным условием, после чего нам возвращается самое первое значение из колонки id.

Результат: 1.

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

Если удалить первую строку в таблице и снова выполнить тот же самый запрос, то результатом будет значение: 3.

3

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


Codeby Market от Сodeby

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