C: libmysqlclient – примеры работы с MySQL API
Давно не писал на С (последний раз – почти год тому, см. What is: Linux namespaces, примеры PID и Network namespaces).
Немного за ним заскучал, ибо язык интересный и заставляет местами поломать голову, потому решил немного освежить память.
Ниже приводятся примеры работы с сервером MySQL/MariaDB на С, используя API из библиотеки libmysqlclient .
Примеры взяты из поста MySQL C API programming tutorial с небольшими изменениями и отсебятинкой.
Получившиеся примеры доступны в репозитории тут>>>.
Устаналиваем на Ubuntu/Debian с помощью apt :
Первый пример
Напишем первый пример, который выполнит подключение к серверу MySQL, и выведет его версию:
Убедимся, что это правда:
Кратко рассмотрим сам код:
- #include <my_global.h> и #include <mysql.h> : включаем заголовочные файлы для работы с MySQL, которые расположены в каталоге /usr/include/mysql/ , путь к которому передадим через вызов mysql_config (см. ниже). В частности – /usr/include/mysql/mysql.h содежит описание mysql_get_client_info()
- затем вызываем mysql_get_client_info() , которая возвращает версию используемой библиотеки
gcc и mysql_config
При компиляции выше мы использовали вызов mysql_config , что бы получить пути к используемым библиотекам и флагам сборки MySQL-клиента.
Можно вызвать mysql_config напрямую, что бы посмотреть эти данные:
Или отобразить только неоходимые данные, что мы и делаем при вызове gcc :
Создание базы данных
В следующем примере – выполним подключение к серверу и запрос на создание новой базы данных.
Тут нам потребуются данные доступа:
- имя хоста – cdb-example.setevoy.org.ua (через CNAME направлено на AWS RDS инстанс с MariaDB)
- имя пользователя – setevoy
- пароль пользователя
Подключаемся к серверу БД, создаём пользоваеля:
Приступаем к коду:
testdb появилась, всё работает.
Процесс выполнения программы:
- MYSQL *con = mysql_init(NULL) – с помощью mysql_init() инициализируем создание новой сессии для создания подключения
- if (con == NULL) – проверяем его состояние, если сессия не создана – выходим с ошибкой, используя exit(1);
- mysql_real_connect(con, «cdb-example.setevoy.org.ua», «setevoy», «[email protected]») – используя mysql_real_connect() создаём подключение, используя созданную сессию ( con ), и передавая имя хоста, пользователя и пароль, и тут же проверяем его состояние с помощью if mysql_real_connect() == NULL
- mysql_query(con, «CREATE DATABASE testdb») – с помощью mysql_query() выполняем запрос на создание базы данных
- mysql_close() – закрываем сессию, созданную с помощью mysql_init()
Создание и наполнение таблицы
Теперь у нас есть пользователь, и база.
Следующим шагом – создадим в этой базе таблицу, и запишем в неё данные:
Тут, что бы не писать один и тот же код при каждом выполнении запросов к MySQL, мы сначала определяем единую функцию, которую будем использовать для проверки успешности подключения:
Затем подключаемся к базе, удаляем таблицу, если она есть ( mysql_query(con, «DROP TABLE IF EXISTS ExampleTable») ), создаём новую таблицу с тремя колонками ( mysql_query(con, «CREATE TABLE ExampleTable(Id INT, TextCol TEXT, IntCol INT)» ), и вносим тестовые данные ( mysql_query(con, «INSERT INTO ExampleTable VALUES(1, ‘TextValue’, 12345)») ).
Получение данных из базы
Теперь, когда данные в базе есть – попробуем их оттуда получить.
Для этого мы выполним:
- создание подключения
- выполнение запроса
- получение результата
Код может выглядить так:
Первое отличие – тут мы выносим параметры для подключения к серверу в макросы препроцессора, создавая такие себе const variables:
И затем используем их при вызове функций:
Не очень уверен, насколько кошерно задавать значения через макрос (хотя пишут, что это нормальный подход), можно использовать другой вариант – с помощью const :
Затем с помощью mysql_store_result() мы сохраняем результат запроса в структуре MYSQL_RES :
Потом подсчитываем кол-во колонок в таблице, используя mysql_num_fields() :
А затем в цикле while проверяем каждую строку, и выводим её на экран:
В строке row[i] ? row[i] : «NULL» проверяем условие: если row[i] имеет значение – то выводим его с помощью модификатора %s (string) для printf() , а если пусто – то пропускаем.
Последним шагом – удаляем данные и закрываем соединение:
Собираем, как в примерах выше, запускаем:
Получение ID
Ещё один пример работы с библиотекой MySQL – получение ID последней добавленной в таблицу записи.
Для этого можно использовать функцию mysql_insert_id() , которая работает, если колонка Id создана с AUTO_INCREMENT .
Используем такой код:
В оригинале для добавления записей использовался немного другой подход:
Но я решил немого его “улучшить”, и в данном случае используется два массива, в которых мы храним данные:
А затем в цикле перебираются их значения, и с помощью sprintf() формируется строка с запросом в переменной buffer:
Как подключиться к бд mysql из c
Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
MySQL является одной из самых распространенных баз данных, которая может использоваться также и в связке с ASP.NET MVC. Для работы с MySQL нам нужен естественно сам MySQL Server, на котором будет находиться база данных. Кроме того, поскольку мы будем работать с C#, то на целевом компьютере должен быть установлен также MySQL Connector.NET 6.9.6. Но необязательно устанавливать раздельно, поскольку при установке сервера MySQL в последних версиях можно сразу установить и MySQL Connector.
Поскольку мы будем взаимодействовать с базой данных через Entity Framework, то соответственно добавим нужный пакет через NuGet. И также через NuGet добавим в проект еще один пакет, который называется MySql.Data.Entity :

Вместе с этим пакетом в проект также будет установлен другой пакет — MySql.Data .
Затем в файле web.config определим подключение, которое будет использоваться:
В данном случае база данных будет называться mobiledb. При этом важно указать точные данные для параметра UserId и Password — соответственно логин и пароль для подключения к базе данных.
Далее добавим простенькую модель и контекст данных:
При создании контекста данных к нему надо применить атрибут DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration)) . В остальном особых различий при подключении к mysql по сравнению с MSSQL нет.
Например, пусть у нас есть два действия по добавлению и выводу объектов:
Добавим несколько объектов:

И затем с помощью дополнительных утилит, например, MySQL Workbench, можно уидеть созданную азу данных, ее структуру и получить с помощью запроса хранящиеся там объекты:
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
MySQL и C# — работаем с базой данных. Запросы SELECT
В видеоуроке рассмотрим работу с базой данных MySQL на примере SELECT-запросов из программы, написанной на языке программирования C#. В статье вы найдёте исходные коды примеров из видео.
В видео показано выполнение запросов выборки (SELECT) к БД с помощью C#. Рассказывается про получение, как одного значения из базы, так и нескольких столбцов и строк.
Исходный код примера с получением одного значения из базы с помощью метода ExecuteScalar():