|  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 | 
| Участник | |
|  | 
|  | 
| 
 |