Проблемы с кавычками в запросе из 1с в mssql #583057


#0 by sasha_mrg
при вызове метода execute происходит исключение, дело по всей видимости в ковычках в названиях потребителей (пример - "#_ООО "Акселерат"" - вызывает исключение, "Д/с "Дюймовочка" п. Новый" - не вызывает). Поле NAME в таблице sql типа Text. как организовать запрос, чтобы происходила корректная запись?
#1 by Fish
Используй двойные кавычки
#2 by sasha_mrg
я так понимаю, что так? Если да, то данный вариант тоже вызывает исключение.
#3 by sda553
Насколько я помню, в MS SQL для строк используются ординарные кавычки, так что правильно было бы
#4 by Широкий
"'"
#5 by sasha_mrg
Итак, вариант с "" вызывает исключение на всех вариантах, а вариант с ' всё также на потребителях, названия которых заканчиваются кавычками, например #_ООО "Акселерат".
#6 by Широкий
С числовыми полями не забудь разделитель триад убрать
#7 by sda553
А теперь представим, что наименование потребителя случайно равно "' + select password from supersecretDB.accounts where name='Admin" вот весело то будет
#8 by sasha_mrg
'"+ВыборкаПотребителей.Наименование+"' при #_ООО "Акселерат" вызывает исключение Incorrect syntax near ''
#9 by Широкий
Добавь
#10 by sasha_mrg
тоже самое исключение
#11 by Широкий
А так?
#12 by sasha_mrg
Тоже самое
#13 by Широкий
Посмотри тогда текст запоса в отладчике , на который ругается
#14 by sda553
Пожалуйста точно скопируйте сюда то, что лежит в переменной ТекстЗапроса
#15 by sda553
Двойные кавычки в строке не должны вызывать ошибку, только что набил и никакой ошибки не было
#16 by sda553
select '#_ООО "Акселерат"' так же не вызвал ошибки
#17 by Fish
Чтобы не париться с кавычками сделай так:
#18 by sasha_mrg
Единственное что наводит на странные мысли - при просмотре выборки запроса пошагово получаем выборкапотребителей                                ВыборкаИзРезультатаЗапроса Наименование                     "#_ООО "Акселерат""    Строка Код                             1 232                    Число большое количество " какое-то или это у меня уже предрассудки?
#19 by Fish
+ Плюсы только лишние скопипастил :)))
#20 by sasha_mrg
то что лежит в СтрокаЗапроса полностью
#21 by sda553
Да так вообще нельзя делать потому что надо что то типа declare int set =1234 INSERT INTO Abonents (ID, NAME) VALUES (,@P2)
#22 by sda553
Блин пользователь с именем P1 затесался declare @P3 int INSERT INTO Abonents (ID, NAME) VALUES (@P3,@P2)
#23 by Fish
в конечно ситуация нетипичная, пользователь должон быть довольно продвинутым :)) Но, наверное, с точки зрения безопасности твой вариант правильнее
#24 by sasha_mrg
опять же, "#_ООО "Акселерат"" - вызывает исключение, "Д/с "Дюймовочка" п. Новый" - не вызывает исключение такое же как и ранее
#25 by sasha_mrg
выглядит это примерно так
#26 by sda553
Разделитель убери у кода, у тебя set @p1 =1 232 а должно быть set @p1 =1232
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям