Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ADO / 7 сообщений из 7, страница 1 из 1
05.04.2001, 16:18
    #32003956
nobody
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO
Как из ADO вызвать SQL хранимую продцедуру с двумя Input параметрами и одним параметром OUTPUT?

делаю

set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=cn
cmd.CommandText="exec SP_"

set prm1=cmd.CreateParameter
prm1.Name="frm"
prm1.Type=2
prm1.Direction=1
prm1.Size=2
cmd.Parameters.Append prm1
prm1.Value=2


set prm2=cmd.CreateParameter
prm2.Name="pg"
prm2.Type=2
prm2.Direction=1
prm2.Size=2
cmd.Parameters.Append prm2
prm2.Value=1

set prm3=cmd.CreateParameter
prm3.Name="rmpg"
prm3.Type=3
prm3.Direction=2
prm3.Size=3
cmd.Parameters.Append prm3

set rs=cmd.Execute

говорит, что не надо бы присвоить значения параметрам для продцедуры SP_
...
Рейтинг: 0 / 0
05.04.2001, 18:00
    #32003964
Kostya79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO
Мне кажется, ты совсем не в ту степь полез... Кстати, поясни, я никак не могу понять, что это значит:

set prm1=cmd.CreateParameter
prm1.Name="frm"
prm1.Type=2
prm1.Direction=1
prm1.Size=2
cmd.Parameters.Append prm1
prm1.Value=2

Я так понял, нужно 2 параметра на входе, 1 на выходе. Пишешь:
cmd.CommandText="exec SP_ @param1='222',@param2='test'"

В процедуре у тебя должен быть SELECT, который и вернет Recordset (если возвращается одно значение, то и будет рекордсет с одним значением), например так:


CREATE PROCEDURE SP_
@param1 varchar(255),
@param2 varchar(255)
AS

SELECT @param1 + @param2

И ты его получишь как
set rs=cmd.Execute
...
Рейтинг: 0 / 0
05.04.2001, 18:09
    #32003965
nobody
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO
хорошо, а как мне третий параметр вернуть из продцедуры?
...
Рейтинг: 0 / 0
05.04.2001, 19:36
    #32003969
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO
Вариант 1.
set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=cn
cmd.CommandText="exec SP_ ?, ?, ? OUT" 'Команда запуска ХП со знаками вопросов вместо значений параметров
cmd.CommandType = adCmdText 'Тип команды - произвольная команда
cmd.Parameters.Append cmd.CreateParameter("frm", adInteger, adParamInput, ,2) 'имена параметров совершенно произвольные
cmd.Parameters.Append cmd.CreateParameter("pg", adInteger, adParamInput, ,1)
cmd.Parameters.Append cmd.CreateParameter("rmpg", adVarChar, adParamOutput, 50)
cmd.Execute 'Выполнили команду
SomeVar = cmd.Parameters("rmpg") 'Получили значение параметра

Вариант 2.
set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=cn
cmd.CommandText="SP_" 'Только имя хранимой процедуры, больше ничего!
cmd.CommandType = adCmdStoredProc 'Тип команды - выполнение хранимой процедуры с заданным именем
cmd.Parameters.Append cmd.CreateParameter("@Param1", adInteger, adParamInput, ,2) 'Имена параметров должны быть с собакой и точно соответствовать именам параметров, объявленным в хранимой процедуре
cmd.Parameters.Append cmd.CreateParameter("@Param2", adInteger, adParamInput, ,1)
cmd.Parameters.Append cmd.CreateParameter("@Param3", adVarChar, adParamOutput, 50)
cmd.Execute 'Выполнили команду
SomeVar = cmd.Parameters("@Param3") 'Получили значение параметра
...
Рейтинг: 0 / 0
06.04.2001, 11:42
    #32003998
nobody
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO
а ничего и не выходит..

<%=Response.Write(SomeVar)%> - NULL выдает в последствии, что с первым, что со вторым вариантом.. хотя на самом деле, если на сервере выполняю эту продцедуру, @Param3 получается целым положительным числом.
...
Рейтинг: 0 / 0
06.04.2001, 15:16
    #32004012
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO
Первый вариант я сам проверял на практике на VBA Access-2000. Нормально работает. Только не надо забывать указать правильно направление передачи в свойствах параметра и в строке вызова ХП возле этого параметра не забыть слово OUT. Это решение нашел в допотопные времена, когда еще не было никакой литературы - экспериментальным путем. Сообщение об этом решении см. подробнее на сайте http://nsa.chat.ru/know.html в разделе "маленькие секреты".
...
Рейтинг: 0 / 0
06.04.2001, 15:18
    #32004014
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO
Узрел небольшую ошибочку в обоих примерах. Не знаю, правда, насколько она существенная. Вместо adParamOutput тужно указывать adParamInpitOutput.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ADO / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]