Выполните хранимую процедуру от классика ASP

По некоторой фантастической причине я отлаживаю проблему в Классической ASP-странице (по крайней мере 10 лет моей жизни, потерянной за прошлые 2 дня).

Я пытаюсь выполнить хранимую процедуру, которая содержит некоторых параметры. Проблема состоит в том, что один из параметры не заполняются, когда хранимая процедура возвращается. Я могу выполнить сохраненный proc от студии управления SQL (это - 2008), и все значения устанавливаются и возвращаются точно как ожидалось.

declare @inVar1 varchar(255)
declare @inVar2 varchar(255)
declare @outVar1 varchar(255)
declare @outVar2 varchar(255)

SET @inVar2  = 'someValue'

exec theStoredProc @inVar1 , @inVar2 , @outVar1 OUT, @outVar2 OUT

print '@outVar1=' + @outVar1
print '@outVar2=' + @outVar2 

Работает отлично.Фантастика.Прекрасно. Точные значения, которые я ожидаю, возвращаются и распечатываются.

Право, так как я пытаюсь отладить Классическую ASP-страницу, я скопировал код в файл VBScript, чтобы попытаться сузить проблему.

Вот то, что я придумал:

Set Conn = CreateObject("ADODB.Connection")
Conn.Open "xxx"

Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn

objCommandSec.CommandType = 4
objCommandSec.CommandText = "theStoredProc "

objCommandSec.Parameters.Refresh

objCommandSec.Parameters(2) = "someValue"

objCommandSec.Execute

MsgBox(objCommandSec.Parameters(3))

Не работает. Даже немного. (Еще десять лет моей жизни коту под хвост) третий параметр является просто ПУСТЫМ - который является тем, что я испытываю в Классической ASP-странице также.

Кто-то мог пролить некоторый свет на это? Действительно ли я абсолютно ненормален для размышления, что классический код ASP совпал бы с кодом VBScript? Я думаю, что это использует тот же механизм выполнения сценариев и синтаксис, таким образом, я должен быть в порядке, но я не на 100% уверен.

Результат, который я вижу от своего VBScript, совпадает с, я вижу в ASP.

6
задан Jaco Pretorius 22 April 2010 в 09:50
поделиться

3 ответа

Попробуйте

With objCommandSec
 Set .ActiveConnection = Conn
 .CommandType = 4
 .CommandText = "theStoredProc"
 .Parameters.Append .CreateParameter("@inVar1", 200, 1, 255, VALUE1)
 .Parameters.Append .CreateParameter("@inVar2", 200, 1, 255, VALUE2)
 .Parameters.Append .CreateParameter("@outVar1", 200, 2, 255)
 .Parameters.Append .CreateParameter("@outVar2", 200, 2, 255)

 .Execute

 Response.Write .Parameters(3).Value
End With 

Вам также следует избегать .Refresh , если вы знаете детали параметра, поскольку он включает возврат к серверу.

10
ответ дан 9 December 2019 в 22:31
поделиться

Не забудьте установить Направление на Выход :

objCommandSec.Parameters(3).Direction = 2
1
ответ дан 9 December 2019 в 22:31
поделиться

Другое решение здесь.

Set Conn = CreateObject("ADODB.Connection")
Conn.Open "xxx"

Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn
objCommandSec.CommandType = 4
objCommandSec.CommandText = "theStoredProc "

objCommandSec.Parameters.Refresh

objCommandSec.parameters.append objCommandSec.createParameter("@inVar1", adVarChar, adParamInput, 255, "someValue1")
objCommandSec.parameters.append objCommandSec.createParameter("@inVar2", adVarChar, adParamInput, 255, "someValue2")
objCommandSec.parameters.append objCommandSec.createParameter("@outVar1", adVarChar, adParamReturnValue)
objCommandSec.parameters.append objCommandSec.createParameter("@outVar2", adVarChar, adParamReturnValue)
objCommandSec.execute , , adExecuteNoRecords
outVar1 = objCommandSec.parameters("@outVar1").value
outVar2 = objCommandSec.parameters("@outVar2").value

response.write outVar1
response.write outVar2
0
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: