Книга знаний

1С:Предприятие / Приемы программирования / Запросы

Параметризация запросов при использовании SQLOLEDB-провайдера

Параметризация запросов при использовании SQLOLEDB-провайдераАвтор статьи: mikecool | Редакторы: Волшебник
Последняя редакция №2 от 02.03.06 | История
URL: http://kb.mista.ru/article.php?id=118

Ключевые слова: Параметризация, запрос, SQLOLEDB, OLEDB


Не помню точно как(склероз), но считается, что параметризация запросов ускоряет время их выполнения. Сейчас появилась задача: показывать в 1С описания товаров, которые находились в сторонней базе в MS SQL Server. Запрос получился довольно тяжелым и если значения условий подставлялись в текст, то время выборки составляло порядка 14-25 секунд. Решил добавить параметры, долго парился, пока не научился - но результат того стоил: время выборки после параметризации составило 5-8 секунд. Теперь обо всем по порядку:

Параметр в тексте запроса объявляется символом «?» (вопрос), причем без имени параметра(я привык параметру задавать имя – и на этом попался). СКЛ-сервер сам преобразует текст, заменив знаки вопроса на «@Рi», где i – порядковый номер параметра в запросе.

Заполняем строку соединения:

ConnectString="Provider=SQLOLEDB; Data Source=" +ServerName+ ";DatabaseName="+ DSN +";Initial Catalog=" +DSN+ ";UID=" + UID+ ";PWD="+PWD;


где    ServerName – имя(IP-адрес) СКЛ-Сервера,
   DSN – имя базы данных
   UID – имя пользователя для соединения(обычно sa)

   PWD – пароль пользователя.

Объявляем и открываем соединение:
    Соединение=CreateObject("ADODB.Connection");
    Соединение.ConnectionTimeOut=600;
    Попытка              
        Соединение.Open(ConnectString); 
    Исключение
        Предупреждение("Не удалось соединиться с базой данных описаний товара!");
        Сообщить(ОписаниеОшибки());
        Возврат 0;
    КонецПопытки;


Создаем объект команды:
    Cmd=СоздатьОбъект("ADODB.Command");
    Cmd.ActiveConnection=Соединение;
    Cmd.CommandTimeOut=600;
    Cmd.CommandType=1;//запрос на языке SQL


После чего повторяем столько раз, сколько есть параметров:
    Пар = Cmd.CreateParameter(Name, Value_Type, Param_type, Param_Lenght, Param_Value);
    Cmd.Parameters.Append(Пар);


Описание CreateParameter можно глянуть здесь: http://melan.gazinter.net/ADO&SQL&1C/commandcreation.htm или еще где найдете.

ВНИМАНИЕ! Имя параметра должно быть ПУСТЫМ (т.е. Name = «»).
Param_Lenght желательно задавать такого размера, какого размера поле в таблице.

Присваиваем текст запроса:
    Cmd.Commandtext=СокрЛП(ТекстЗапроса);

и выполняем…
Закрываем соединение:
Соединение.Close();

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика