2009-08-06 2 views
0

Это ADO в классическом ASP.Проблема ADO, параметр "@IsNew" не приводит к возврату результатов?

У меня есть хранимая процедура с параметром @IsNew типа int.

Я могу назвать это с помощью SQL:

EXEC [dbo].[SearchVehicles] 
    @WebsiteName = N'AMSVans', 
    @SortOrder = N'Year DESC,Status ASC', 
    @Statuses = N'Unsold', 
    @IsNew = 1 

и возвращение множества точно так, как ожидалось.

Однако, когда я пытаюсь использовать его в моей веб-странице:

cmd.CommandText = "AMSVans.dbo.SearchVehicles" 
cmd.CommandType = adCmdStoredProc 

cmd.Parameters.Append cmd.CreateParameter("@WebsiteName", adVarChar, , 75, "AMSVans") 
cmd.Parameters.Append cmd.CreateParameter("@SortOrder", adVarChar, , 500, "Year DESC,Status ASC," + SortMethod) 
cmd.Parameters.Append cmd.CreateParameter("@Statuses", adVarChar, , 500, Statuses) 
cmd.Parameters.Append cmd.CreateParameter("@IsNew", adInteger, , 4,1) 
cmd.Parameters.Append cmd.CreateParameter("@Categories", adVarChar, , 500, "AMS Vans") 

Set r = cmd.Execute 

я не вернусь ничего. Нада. Шиш.

Я даже не знаю, где начать отладку этой: -/

Update RE "Установить NOCOUNT на":

Интересно, если я отключить его (т.е. комментарий из этой линии), я получаю эту ошибку:

ADODB.Recordset error '800a0e78' 
Operation is not allowed when the object is closed. 
/pages/inventory/main.asp, line 109 

линия в вопросе (г является записей):

if not (r.EOF and r.EOF) then invFound = true 
+0

Эй вы возвращаете несколько наборов результатов? – cmsjr

+0

Да. (Теперь он работает после того, как я заполнил значения по умолчанию для параметров, которые были «отсутствуют») – Matt

ответ

1

Если ваша хранимая процедура может создавать несколько наборов результатов (включая промежуточные результаты, которые не предназначены для возврата), попробуйте установить nocount в начале proc. Множественные результаты могут вызвать проблемы для наборов записей ado.

например.

Set NoCount On 

Кроме того, если это не работает, и вы изменили процедурный недавно попробуйте запустить его с вашей страницы с различными параметрами, так что вы не получаете результат из кэша.

Редактировать

Я заметил, что вы определяете длину для параметра INT, который необходим только для типов переменной длины, и, как правило, по умолчанию 0, попробуйте опустить его.

+0

Его уже там! – Matt

+0

Интересно, если я отключу его (т. Е. Прокомментирую эту строку), я получаю эту ошибку: ADODB.Recordset error '800a0e78' Операция не допускается, когда объект закрыт. /pages/inventory/main.asp, линия 109 линия в вопросе (г есть набор записей): если нет (r.EOF и r.BOF), то invFound = истинно – Matt

+0

Стоит отметить, что изменение параметров Безразлично» t меняет вещь, и комментирование параметра «@IsNew» отлично работает. – Matt

0

Я понимаю теперь, что это было бы очевидно для всех, если бы я считал, что это имеет значение, чтобы сказать, что процедура имеет около 20 параметров, а так как @IsNew был последним, а остальные были первыми - ну, давайте просто говорят, что добавление параметров, оцененных по умолчанию для тех, кто находится между ними, делает все возможное.

+0

Это характеристика поставщика, он интерпретирует все параметры позиционно, независимо от имени. – cmsjr

+0

Хотел бы я знать, что раньше - ну, SQL следы на помощь. – Matt

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

  • Нет связанных вопросов^_^