存储过程参数的参数类型错误

时间:2013-11-19 12:07:17

标签: stored-procedures parameters asp-classic vbscript adodb

我使用存储过程返回产品价格,我向其发送两个参数,一个是股票代码,另一个是客户编号。当我运行这是得到以下错误

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

有人可以帮我改变这段代码,这样我就可以将文字发送给参数了吗?

2 个答案:

答案 0 :(得分:1)

adParamReturnValue参数只能是数字。要返回其他类型的数据,请阅读this(并选择您的sqlserver版本)

答案 1 :(得分:0)

您正在以错误的方式使用存储过程。如this other answer中所述,adParamReturnValue表示“使用存储过程返回值”,它只能是数字代码。

看起来你真正追求的是输出参数,即2 {aka 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类型时,还必须指定数据长度。