Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неожиданное поведение. Как выполнить параметризированный SQL запрос?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
twilight_dream
Как выполнить параметризированный запрос? Что делаю не так.

    СтрокаПодключения = "driver=SQL Server;Server="+имяСервера+";Database=Mayer_central;User Id="+Логин+";Password="+Пароль+";";
    Connection = СоздатьОбъект("ADODB.Connection");
    Connection.Open(СтрокаПодключения);
    Command = СоздатьОбъект("ADODB.Command");
    Command.ActiveConnection = Connection;
    Command.CommandType = 1;    
    Command.Prepared = 1;
    Command.NamedParameters = 1;
    Сообщить ("Удачно подключились");
    //Грузим товары
    //1. Очистка таблицы
    ТекстЗапроса = "DELETE FROM tblProducts WHERE Product_Id<>@two ";    
    Command.CommandText = ТекстЗапроса;                              
    Product_Id =  command.CreateParameter("@two", 5, 1, , 0);
    command.Parameters.Append(Product_Id);
    command.Parameters.Item(0).Value  = 2;
    Command.Execute();

Выдается ошибка:
Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC SQL Server Driver][SQL Server]Необходимо объявить скалярную переменную "@two".

судя по всему в данном случае дривер не понимает, что @two - это параметр. Попытки использовать вариации ":two" и "%two%" не привели к успеху.
alex040269
может ?two
twilight_dream
Цитата(alex040269 @ 17.12.14, 14:57) необходимо зарегистрироваться для просмотра ссылки
может ?two

Не ... в том то и удивительно, что всё синтаксически правильно.
alex040269
Цитата(twilight_dream @ 17.12.14, 14:49) необходимо зарегистрироваться для просмотра ссылки
Product_Id = command.CreateParameter("@two", 5, 1, , 0);

тогда
Product_Id =  command.CreateParameter("two", 5, 1, , 0);
logist
Вставляйте параметр явным текстом в запрос.

upd
или так
ТекстЗапроса = "DELETE FROM tblProducts WHERE Product_Id<> (@two)";    


twilight_dream
Цитата(logist @ 17.12.14, 15:56) необходимо зарегистрироваться для просмотра ссылки
Вставляйте параметр явным текстом в запрос.

upd
или так
ТекстЗапроса = "DELETE FROM tblProducts WHERE Product_Id<> (@two)";    


Но по сути сложность запроса здесь не имеет значения. Если сработает этот, будет работать и тот. Надо пока с этим случаем разобраться. Почему не работает. Кстати, скобки ничего не дают вэтом плане.

Но пока мог бы и явно подставлять, только неясно что делать с наименованиями, в которых могут попадаться разные там спецсимволы и одинарные кавычки.

то есть на самом деле есть более сложные запросы, где рациональней использовать именно параметры.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.