| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > ошибка при выполнении запроса |
| Автор: chesterfielda 30.7.2009, 11:40 | ||||
| Добрый день, работаю с БД почему-то на запрос
выдает ошибку: error: invalid operands of types `const char*' and `const char[1]' to binary `operator+' но если написать
то все работает и как быть??все-таки zakazchik.rf_auctID числовое поле,а не строковое |
| Автор: Romikgy 30.7.2009, 12:06 | ||
| C++ не умеет сам приводить типы сделай что то типа
|
| Автор: SABROG 30.7.2009, 12:37 | ||||
|
| Автор: ecspertiza 30.7.2009, 15:54 | ||
В принципе уже всё написано но можно ещё и так
|
| Автор: Любитель 30.7.2009, 16:27 |
| Самый правильный вариант - второй. Заниматся конкатенцией SQL-а из строк (когда достаточно параметризованного запроса) - это извращение. Единственное - в зависимости от СУБД синтаксис задания параметров (в SQL запросе) может различаться. |
| Автор: SABROG 30.7.2009, 16:35 |
| Кроме того с конкатенацией строк возникает "дыра" - SQL Injection. |
| Автор: Любитель 30.7.2009, 17:46 |
| В общем случае нет. Что возникает всегда - проблема читабельности кода и снижение производительности. |
| Автор: SABROG 30.7.2009, 20:50 | ||
Это смотря какой общий случай. Если доступ к базе данных разграничен средствами программы, а не SQL сервера, то у "знающих" пользователей могут появится права, которых быть не должно. Например у меня на работе программа (не моя) предоставляет возможность управлять бухгалтерией, просматривать и редактировать историю действий (кто во сколько зашел в программу, чего делал на протяжении всего дня, когда завершил работу и т.п.), проставлять специальный аттрибут на заявки типа "оплачено", естественно у обычных пользователей нет возможности открывать формы с таблицами где идет работа с такими данными. Это, в первую очередь, финансовый вопрос, куда обычные сотрудники не должны лезть или даже видеть. В общем, не зависимо от программы, лучше взять за правило не конкатенировать строки для создания SQL запросов. А если выбора нет, то читать на тему экранирования управляющих символов к конкретной БД SQL и валидации введеных данных. |
| Автор: Любитель 30.7.2009, 21:58 |
| Да эт всё понятно.. В запросе топикстартера инъекции неоткуда взяться Если я говорю, что "в общем случае нет" - значит существуют случаи, когда это не так Впрочем ладно - идём дальше. Нормальных ORM на С++ нет, да и вряд ли будут. Поэтому запросы так или иначе пишутся в 99% случаев явно. Но (!) запросы в коде - это тоже зло. В любом виде. С точки зрения maintainability. Поэтому, для достаточно крупногго проекта лучше использовать хранимки |
| Автор: SABROG 30.7.2009, 23:00 |
Я так и делаю обычно. Плохо только то, что приходится изобретать велосипед в виде формата такого файла. Конечно врятли кто будет писать серьезное приложения с использованием sqlite, но он хранимки не поддерживает (по крайней мере пару лет назад не держал, как щас не знаю). Но даже если использовать хранимые процедуры, то им же надо параметры передавать, а это опять формирование SQL запроса. |