17.03.2016, 15:26 | #1 |
Участник
|
есть стандартный метод для экранирования спецсимволов в прямом запросе SQL?
дурацкий вопрос. использую внешний запрос Statement. пользователь передает параметр по которому надо отфильтровать. параметр надо вставить в условие where.
есть ли штатный метод, чтобы экранировать спецсимволы для SQL? типа SysQuery::value. только для SQL |
|
17.03.2016, 16:12 | #2 |
Дмитрий Ерин
|
Есть SqlSystem.sqlLiteral(). Он вроде как приводит anytype к нужному виду. Но экранирует ли - тут я не уверен. Как используется, можно глянуть в \Classes\SQLBuilderValueNode\doGetExpression.
__________________
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
17.03.2016, 16:17 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
17.03.2016, 17:29 | #4 |
Участник
|
Если это просто строковой литерал, то я думаю достаточно заэкранировать кавычки (') удвоив их.
В общем случае всё сложнее https://technet.microsoft.com/ru-ru/...=sql.105).aspx |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
17.03.2016, 20:13 | #5 |
Участник
|
Какой интересный метод...
А какие у него интересные параметры... А какие у него перекрестные ссылки! А кто это у нас тут напрямую в базу лезет! Спасибо! Я так и думал, что что-то подобное обязательно уже есть. Цитата:
Сообщение от S.Kuskov
В общем случае всё сложнее https://technet.microsoft.com/ru-ru/...=sql.105).aspx
Поэтому и спрашиваю. |
|
22.03.2016, 02:49 | #6 |
Участник
|
Cделали себе метод в глобале. Тонны SQL через него преобразуются. У sqlLiteral ограничение кажется 128 символов.
X++: static str any2sql(anytype _value) { #define.LEN_FOR_SPLIT(100) SqlSystem sqlSystem = new SqlSystem(); int i,nLen; str ret,curSubStr; if (typeOf(_value) == Types::String) { nLen = strLen(_value); if (nLen <= #LEN_FOR_SPLIT) { return sqlSystem.sqlLiteral(_value); } while (nLen) { curSubStr = subStr(_value, 1, #LEN_FOR_SPLIT); curSubStr = sqlSystem.sqlLiteral(curSubStr); if (ret) { ret = subStr(ret, 1, strLen(ret)-1) + subStr(curSubStr, 3, strLen(curSubStr)-2); } else { ret = curSubStr; } _value = subStr(_value, #LEN_FOR_SPLIT + 1, nLen); nLen = strLen(_value); } return ret; } return sqlSystem.sqlLiteral(_value); } |
|
22.03.2016, 10:37 | #7 |
Участник
|
Даже страшно представить зачем вам тонны SQL...
|
|
22.03.2016, 16:24 | #8 |
Участник
|
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|