|
ADO
|
|||
---|---|---|---|
#18+
Как из 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_ ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2001, 16:18 |
|
ADO
|
|||
---|---|---|---|
#18+
Мне кажется, ты совсем не в ту степь полез... Кстати, поясни, я никак не могу понять, что это значит: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2001, 18:00 |
|
ADO
|
|||
---|---|---|---|
#18+
хорошо, а как мне третий параметр вернуть из продцедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2001, 18:09 |
|
ADO
|
|||
---|---|---|---|
#18+
Вариант 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") 'Получили значение параметра ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2001, 19:36 |
|
ADO
|
|||
---|---|---|---|
#18+
а ничего и не выходит.. <%=Response.Write(SomeVar)%> - NULL выдает в последствии, что с первым, что со вторым вариантом.. хотя на самом деле, если на сервере выполняю эту продцедуру, @Param3 получается целым положительным числом. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2001, 11:42 |
|
ADO
|
|||
---|---|---|---|
#18+
Первый вариант я сам проверял на практике на VBA Access-2000. Нормально работает. Только не надо забывать указать правильно направление передачи в свойствах параметра и в строке вызова ХП возле этого параметра не забыть слово OUT. Это решение нашел в допотопные времена, когда еще не было никакой литературы - экспериментальным путем. Сообщение об этом решении см. подробнее на сайте http://nsa.chat.ru/know.html в разделе "маленькие секреты". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2001, 15:16 |
|
|
start [/forum/topic.php?fid=46&msg=32003964&tid=1827049]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 19ms |
total: | 149ms |
0 / 0 |