2017-01-10 1 views
0

У меня есть старое веб-приложение, построенное с VBScript на сервере IIS6 с базой данных SQL Server 2008. Он обрабатывается при перемещении на новый сервер на IIS8.Параметры команды ADODB Refresh не извлекает параметры

Каждый запрос в приложении работает с хранимыми процедурами, с которыми у нас никогда не было проблемы. Но на новом сервере это не работает. Я нашел это потому, что Command.Parameters.Refresh не возвращает параметры должным образом.

Рассмотрим этот код:

Set cmd = Server.CreateObject("ADODB.Command") 
cmd.ActiveConnection = conn 
cmd.CommandType = 4 
cmd.CommandText = v_strSpName 
cmd.CommandTimeout = 0 
cmd.Parameters.Refresh 

For i = LBound(v_arrParameters) To UBound(v_arrParameters) 
    If m_bReplaceEmptyToNull Then 
     v_arrParameters(i)(1) = ReplaceEmpty(v_arrParameters(i)(1)) 
    End If 

    cmd.Parameters(v_arrParameters(i)(0)).value = v_arrParameters(i)(1) 
Next 

Все в v_arrParameters существует, но я попытался переборе в Parameters.name после обновления, параметры не возвращаются (но они находятся на сервере).

Также стоит отметить, то SQL Profiler действительно получает запрос и возвращает параметры:

exec [Database]..sp_procedure_params_rowset N'get_company',1,N'dbo',NULL 

Согласно this page, это известная проблема, я просто хочу, чтобы убедиться, что он не приходит от этого проблемы и найти решение или альтернативу, которая не предполагает полного переписывания приложения.

Кроме того, нет я не могу обновить версию SQL Server, переключитесь на VB.NET, всегда есть проблема, что есть клиент, который не будет платить за эту проблему.

+0

Извините, я пропустил, где эта страница заявляет, что это известная проблема? Ближайший я могу видеть, что вы называете * «Известная проблема» * is * «Parameters.refresh ** не будет работать в некоторых ситуациях ** или вернуть неверную информацию». *. В каких ситуациях он не говорит. Лично я не использую '.Refresh()' именно по этой причине, поскольку перед использованием этого метода у меня возникли проблемы с поддержкой в ​​Providers. – Lankymart

+0

@ Lankymart Это то, о чем я говорил с этой «известной проблемой», но не говорю, что ситуации довольно бесполезны. Что вы используете вместо '.Refresh()'? –

ответ

0

Так нам удалось заставить его работать так:

  • Открытие раздела Приложения Пулы в диспетчере IIS.
  • Отправляясь в расширенных настройках по умолчанию App Pool (его имя здесь, возможно, не для всех, я не знаю)
  • Установка Enable 32-bits apps в True

Это на 64-битной ОС Windows Server 2012 R2, с Microsoft SQL Server 2008 (SP4) - 10.0.6241.0 (X64).

Смежные вопросы