我使用存储过程返回产品价格,我向其发送两个参数,一个是股票代码,另一个是客户编号。当我运行这是得到以下错误
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
有人可以帮我改变这段代码,这样我就可以将文字发送给参数了吗?
答案 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
类型时,还必须指定数据长度。