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.
Очень часто здесь допускают ошибку, используя следующую запись:
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.
Читайте также: