Проблема в том, что вы, вероятно, создаете Unicode, что означает, что CString состоит из широких символов. Вы не можете напрямую объединить строку ASCII со строкой широких символов (и вы также не можете объединить строковые литералы с помощью оператора +).
Я думаю, что самый простой способ создать строку запроса здесь - использовать макрос CT2CA
для преобразования содержимого элемента управления редактирования из Unicode в ASCII и CStringA::Format
для вставки их в строку
CStringA query;
query.Format("select album from Artists where artist = '%s'", CT2CA(m_search_edit));
res = mysql_perform_query(conn, query);
И, как указал Томас, вы должны знать, что это оставляет дверь открытой для SQL-инъекций ...
РЕДАКТИРОВАТЬ: Я не уверен, откуда взялся этот mysql_perform_query
API, но из сообщения об ошибке, которое вы опубликовали, похоже, что для него также требуется буфер записи (char *
вместо const char *
). Поскольку я не могу найти документацию для него, я не знаю, насколько велик ожидаемый размер этого буфера, но чтобы получить модифицируемый буфер из CString, посмотрите на GetBuffer () и ReleaseBuffer () методы:
CStringA query;
query.Format(...); // Replace ... with parameters from above
char * buffer = query.GetBuffer(MAX_STRING_LENGTH); // make length big enough for mysql
res = mysql_perform_query(conn, buffer)
query.ReleaseBuffer();
EDIT2 (в ответ на последний комментарий):
Спасибо за предоставление определения вашей mysql_perform_query
функции. Задавая вопросы в будущем, имейте в виду, что полезно знать, когда вы создали вспомогательные функции, подобные этой.
В этом случае ваша mysql_perform_query
функция никогда не изменяет строку запроса - единственное, что она делает, это передает ее mysql_query
, что занимает const char *
, поэтому нет причин, по которым вы не должны объявлять ее параметр const
тоже. Как только вы это сделаете, вы обнаружите, что мой первый ответ работает (нет необходимости в GetBuffer / ReleaseBuffer):
MYSQL_RES *mysql_perform_query(MYSQL *conn, const char * query)
{
// Body as written in comment.
}