Книга знаний

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

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

Параметризация запросов при использовании SQLOLEDB-провайдераАвтор статьи:
Последняя редакция №1 от 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

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