Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не возвращается параметр из ХП.  [new]
chvjak
Member

Откуда:
Сообщений: 12
Есть хранимая процедура:
CREATE PROC TestProc
  @param1 INT OUTPUT
AS
SET NOCOUNT ON
SELECT
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10,
    11

SET @param1 = 10

Есть такой код на VBS:
Const adCmdStoredProc = &H0004
Const adInteger = 3
Const adParamOutput = &H0002

Dim ConnDB : Set ConnDB = CreateObject("ADODB.Connection")

'uncomment this line to see the difference
'ConnDB.CursorLocation = adUseClient

ConnDB.Open "Provider=sqloledb;Trusted_Connection=yes;DATABASE=DB1;SERVER=SERVER1;"

Dim oCmd : Set oCmd = CreateObject("ADODB.Command")
Set oCmd.ActiveConnection = ConnDB
oCmd.CommandType = adCmdStoredProc
oCmd.CommandText = "TestProc"

oCmd.Parameters.Append oCmd.CreateParameter("param1", adInteger, adParamOutput, 4, 0)

Dim oRS : Set oRS = CreateObject("ADODB.Recordset")
oRS.Open oCmd

Dim iParam: iParam = oCmd("param1")

MsgBox "typename(iParam)=" & typename(iParam)
MsgBox "iParam=" & iParam


В итоге oCmd("param1").Value=Empty

Вот что заметил:
1.Если CursorLocation=adUseClient, то все ок.
2.Если не "брать" рекордсет т.е вместо oRS.Open oCmd (или Set oRS=oCmd.Execute) сделать oCmd.Execute, то параметр возвращается (oCmd("param1").Value=10).

Если у кто-нить есть мысли на этот счет - поделитесь.

MS SQL 2000.
5 окт 04, 14:30    [1009608]     Ответить | Цитировать Сообщить модератору
 Re: Не возвращается параметр из ХП.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Если у кто-нить есть мысли на этот счет - поделитесь.
Если вам не нужен возвращаемый рекродсет, а только выходной параметер то зачем делать oRS.Open ?
А если нужен и рекодсет и возвращаемый параметер то придется рекодсет полностью получить. Что и происходит автоматом при CursorLocation=adUseClient. Иначе если результат SELECT-а еще не вернулся клиенту то о каком OUTPUT параметре можно говорить ?
5 окт 04, 14:38    [1009646]     Ответить | Цитировать Сообщить модератору
 Re: Не возвращается параметр из ХП.  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2676
Я не спец по VBS, но сдается мне, что или ты не так его просишь, или он не умеет нормально у MSSQL спросить.

можно спросить так:
declare @param1 INT 
set @param1  = 0
exec TestProc param1 
select @param1
получим 0

А если:
declare @param1 INT 
set @param1  = 0
exec TestProc param1 OUTPUT
select @param1
то тогда все будет ок.
5 окт 04, 14:40    [1009655]     Ответить | Цитировать Сообщить модератору
 Re: Не возвращается параметр из ХП.  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
oCmd.Parameters.Append oCmd.CreateParameter("param1", adInteger, adParamOutput, 4, 0)

ocmd.execute

MsgBox "typename(iParam)=" & typename(iParam)
MsgBox "iParam=" & oCmd.Parameters("param1").Value


т.е. в скрипте не было попытки выполнить команду...
5 окт 04, 14:43    [1009667]     Ответить | Цитировать Сообщить модератору
 Re: Не возвращается параметр из ХП.  [new]
chvjak
Member

Откуда:
Сообщений: 12
Glory, спасибо.

попробовал добавить
Dim arr1 : arr1 = oRS.GetRows()
перед
Dim iParam: iParam = oCmd("param1")

Работает.

До этого перепробовал кучу вариантов, в том числе и этот, но видимо пропустил положительный результат.
5 окт 04, 14:46    [1009677]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить