|
|
|
chesterfielda |
|
||||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 13.7.2009 Репутация: нет Всего: нет |
Добрый день, работаю с БД
почему-то на запрос
выдает ошибку: error: invalid operands of types `const char*' and `const char[1]' to binary `operator+' но если написать
то все работает и как быть??все-таки zakazchik.rf_auctID числовое поле,а не строковое |
||||
|
|||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
C++ не умеет сам приводить типы
сделай что то типа
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
SABROG |
|
||||
Hacker Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
|
||||
|
|||||
ecspertiza |
|
|||
Опытный Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
В принципе уже всё написано но можно ещё и так
|
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Самый правильный вариант - второй. Заниматся конкатенцией SQL-а из строк (когда достаточно параметризованного запроса) - это извращение. Единственное - в зависимости от СУБД синтаксис задания параметров (в SQL запросе) может различаться.
|
|||
|
||||
SABROG |
|
|||
Hacker Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Кроме того с конкатенацией строк возникает "дыра" - SQL Injection.
|
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
В общем случае нет. Что возникает всегда - проблема читабельности кода и снижение производительности.
|
|||
|
||||
SABROG |
|
|||
Hacker Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Это смотря какой общий случай. Если доступ к базе данных разграничен средствами программы, а не SQL сервера, то у "знающих" пользователей могут появится права, которых быть не должно. Например у меня на работе программа (не моя) предоставляет возможность управлять бухгалтерией, просматривать и редактировать историю действий (кто во сколько зашел в программу, чего делал на протяжении всего дня, когда завершил работу и т.п.), проставлять специальный аттрибут на заявки типа "оплачено", естественно у обычных пользователей нет возможности открывать формы с таблицами где идет работа с такими данными. Это, в первую очередь, финансовый вопрос, куда обычные сотрудники не должны лезть или даже видеть. В общем, не зависимо от программы, лучше взять за правило не конкатенировать строки для создания SQL запросов. А если выбора нет, то читать на тему экранирования управляющих символов к конкретной БД SQL и валидации введеных данных. |
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Да эт всё понятно.. В запросе топикстартера инъекции неоткуда взяться Ибо значение зашито в коде. А так - зависит от того, контролируется ли значение пользователем или нет. Ну и плюс действительно есть и олдскульные методы борьбы путём экранирования.
Если я говорю, что "в общем случае нет" - значит существуют случаи, когда это не так Впрочем ладно - идём дальше. Нормальных ORM на С++ нет, да и вряд ли будут. Поэтому запросы так или иначе пишутся в 99% случаев явно. Но (!) запросы в коде - это тоже зло. В любом виде. С точки зрения maintainability. Поэтому, для достаточно крупногго проекта лучше использовать хранимки Впрочем, для маленьких приложений - достаточно вынести в ресурсы или даже просто в отдельный файл. |
|||
|
||||
SABROG |
|
|||
Hacker Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я так и делаю обычно. Плохо только то, что приходится изобретать велосипед в виде формата такого файла. Конечно врятли кто будет писать серьезное приложения с использованием sqlite, но он хранимки не поддерживает (по крайней мере пару лет назад не держал, как щас не знаю). Но даже если использовать хранимые процедуры, то им же надо параметры передавать, а это опять формирование SQL запроса. |
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
SQLite3 не поддерживает точно и не будет. Если там когда-то хранимки и будут (хотя ИМХО SQLite не для того придумывали), то это повлечёт изменение мажорного номера версии.
Да не, это понятно. Просто запрос тривиален - такой запрос вполне можно пихать прямо в код. Всё бизнес-логика запроса в самой хранимке. А вообще - мы отвлеклись от темы. Я, конечно, не против этой темы, просто тема топика была более узкая. Если кому-то интересно продолжить эту тему - вынесу в отдельный топ. |
|||
|
||||
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |