2013-11-19 4 views
0

Я использую хранимая процедура для возврата цены продукта, когда я отправляю ему два параметра, а код фонта и другой - как номер клиента. Когда я запускаю это, получаем следующую ошибку.Аргументы неправильного типа с параметрами хранимой процедуры

ADODB.Command error '800a0bb9' 

Arguments are of the wrong type, are out of acceptable range, or are in conflict 
with one another. 

Два параметра, которые я отправляю обе строки, могут меняться по длине.

Код выглядит следующим образом.

bnno = request("bn") 
stockcode = request("ht") 

dim prices 

    Set cn = Server.CreateObject("ADODB.Connection") 
    cn.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=stock;"&_ 
"User Id=username;Password=password;" 
    Set cmd = Server.CreateObject("ADODB.Command") 
    Set cmd.ActiveConnection = cn 
    Set prices = Server.CreateObject("ADODB.RecordSet") 
    cmd.CommandText = "sp_stockdata" 
    cmd.CommandType = adCmdStoredProc 
    cmd.Parameters.Append cmd.CreateParameter("htcode", adlongvarchar, _ 
     adParamReturnValue) 
    cmd.Parameters.Append cmd.CreateParameter("bn", adlongvarchar, _ 
     adParamInput) 

    cmd("htcode") = stockcode 
    cmd("bn") = bnno 

    set prices = cmd.Execute 

Может кто-то, пожалуйста, помогите мне изменить этот код, чтобы я мог отправить текст в параметры?

+1

Какие типы данных ожидают хранимые процедуры? –

ответ

1

Параметры adParamReturnValue могут быть только числовыми. Чтобы вернуть другие данные, прочитайте this (и выберите версию вашего SQL-сервера)

0

Вы неправильно используете хранимую процедуру. Как упоминалось в this other answer, adParamReturnValue означает «использовать возвращаемое значение хранимой процедуры», которое может быть только числовым кодом.

Похоже, что вы на самом деле после того, как это выходной параметр, который 2 ака adParamOutput. Вы также не можете назначить выходной параметр локальной переменной.
После второго чтения я понимаю, что приведенное выше неверно, оставляя его для других, которые могут запутаться подобным образом.

То, что вы действительно хотите, насколько я могу видеть только послать двух входных параметров, так что правильный код будет:

cmd.CommandText = "sp_stockdata" 
cmd.CommandType = adCmdStoredProc 
cmd.Parameters.Append cmd.CreateParameter("htcode", adLongVarChar, adParamInput, Len(stockcode), stockcode) 
cmd.Parameters.Append cmd.CreateParameter("bn", adLongVarChar, adParamInput, Len(bnno), bnno) 
set prices = cmd.Execute 

Обратите внимание, что вы должны также указать длину данных при использовании adLongVarChar типа.

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