【问题标题】:asp classic command object errorasp经典命令对象错误
【发布时间】:2013-01-09 22:29:30
【问题描述】:

我正在将一些代码从构造字符串转换为参数化查询,遇到命令对象问题。

if (session("pafWebService") = true) then

Dim adoCMD 
Dim adoRS 
Dim strSQL 
Dim lRecordsAffected 

strSQL =  "insert into job values  (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,)" 

Set adoCMD = Server.CreateObject("ADODB.Command")
With adoCMD
.ActiveConnection = conn
.CommandText = strSQL
.CommandType = adCmdText
.parameters.Append .CreateParameter("account", adVarChar, adParamInput, 16 , cCustcode)
.parameters.Append .CreateParameter("reference", adVarChar, adParamInput, 40 , cReference)
.parameters.Append .CreateParameter("priority", adVarChar, adParamInput, 3 , cPriority)
.parameters.Append .CreateParameter("colldate", adVarChar, adParamInput, 8 , cCollDate)
.parameters.Append .CreateParameter("deldate", adVarChar, adParamInput, 8 , cDelDate)
.parameters.Append .CreateParameter("onby", adInterger, adParamInput, 4 , nOnby)
.parameters.Append .CreateParameter("timestart", adVarChar, adParamInput, 4 , cTimestart)
.parameters.Append .CreateParameter("timeend", adVarChar, adParamInput, 4 , cTimeend)
.parameters.Append .CreateParameter("delname", adVarChar, adParamInput, 40 , cDelname)
.parameters.Append .CreateParameter("deladd1", adVarChar, adParamInput, 40 , cAdd1)
.parameters.Append .CreateParameter("deladd2", adVarChar, adParamInput, 40 , cAdd2)
.parameters.Append .CreateParameter("deladd3", adVarChar, adParamInput, 40 , cAdd3)
.parameters.Append .CreateParameter("deltown", adVarChar, adParamInput, 40 , cAdd4)
.parameters.Append .CreateParameter("delcounty", adVarChar, adParamInput, 40 , cAdd5)
.parameters.Append .CreateParameter("delpostcode", adVarChar, adParamInput, 10 , cPostcode)
.parameters.Append .CreateParameter("goods", adVarChar, adParamInput, 40 , cGoods)
.parameters.Append .CreateParameter("wgt", adInteger, adParamInput, 4 , nWgt)
.parameters.Append .CreateParameter("qty", adInteger, adParamInput, 4 , nQty)
.parameters.Append .CreateParameter("plt", adInteger, adParamInput, 4 , nPlt)
.parameters.Append .CreateParameter("vol", adInteger, adParamInput, 4 , nVol)
.parameters.Append .CreateParameter("haz", adInteger, adParamInput, 4 , nHaz)
.parameters.Append .CreateParameter("adr", adVarChar, adParamInput, 10 , cadr)
.parameters.Append .CreateParameter("adrpack", adVarchar, adParamInput, 10 , cAdrpack)
.parameters.Append .CreateParameter("taillift", adInteger, adParamInput, 4 , nTl)
.parameters.Append .CreateParameter("rigid", adInteger, adParamInput, 4 , nRi)
.parameters.Append .CreateParameter("ringforbook", adInteger, adParamInput, 4 , nBook)
.parameters.Append .CreateParameter("notes", adVarChar, adParamInput, 250 , cNotes)
.parameters.Append .CreateParameter("phoneno", adVarChar, adParamInput, 30 , cPhoneNo)
.parameters.Append .CreateParameter("userid", adInteger, adParamInput, 4 , session("userid"))
.parameters.Append .CreateParameter("confirmed", adInteger, adParamInput, 4 ,0)
.parameters.Append .CreateParameter("processed", adInteger, adParamInput, 4 ,0)
.parameters.Append .CreateParameter("adrname", adVarchar, adParamInput, 30 ,cAdrname)
.parameters.Append .CreateParameter("adrchem", adVarchar, adParamInput, 10 ,cAdrchem)
.parameters.Append .CreateParameter("timestartc", adVarchar, adParamInput, 4 ,ctimestartcol)
.parameters.Append .CreateParameter("timeendc", adVarchar, adParamInput, 4 ,ctimeendcol)
.parameters.Append .CreateParameter("confno", adInteger, adParamInput, 4 ,0)
.parameters.Append .CreateParameter("jobno", adInteger, adParamInput, 4 ,0)
.parameters.Append .CreateParameter("fplt", adInteger, adParamInput, 4 , nfPlt)
.parameters.Append .CreateParameter("hplt", adInteger, adParamInput, 4 , nhPlt)
.parameters.Append .CreateParameter("qplt", adInteger, adParamInput, 4 , nqPlt)
.parameters.Append .CreateParameter("coll1", adVarChar, adParamInput, 30 ,cColl1)
.parameters.Append .CreateParameter("coll2", adVarChar, adParamInput, 30 ,cColl2)
.parameters.Append .CreateParameter("coll3", adVarChar, adParamInput, 30 ,cColl3)
.parameters.Append .CreateParameter("coll4", adVarChar, adParamInput, 30 ,cColl4)
.parameters.Append .CreateParameter("coll5", adVarChar, adParamInput, 30 ,cColl5)
.parameters.Append .CreateParameter("collp", adVarChar, adParamInput, 30 ,cCollp)
.parameters.Append .CreateParameter("colname", adVarChar, adParamInput, 30 ,cColname)
.parameters.Append .CreateParameter("printed", adBoolean, adParamInput, 1 ,false)
.parameters.Append .CreateParameter("cheps", adInteger, adParamInput, 4 ,nCheps)
.parameters.Append .CreateParameter("countryd", adVarChar, adParamInput, 30 ,ccountryd)
.parameters.Append .CreateParameter("countryc", adVarChar, adParamInput, 30 ,ccountryc)
.parameters.Append .CreateParameter("uniqueid", adVarChar, adParamInput, 30 ,cUniqueId)
.parameters.Append .CreateParameter("co2", adInteger, adParamInput, 10 , request.form("cC02"))
.parameters.Append .CreateParameter("carbon", adInteger, adParamInput, 10 , request.form("cCarbon"))
.parameters.Append .CreateParameter("am", adInteger, adParamInput, 4 ,nAM)
.parameters.Append .CreateParameter("pm", adInteger, adParamInput, 4 ,nPM)
.parameters.Append .CreateParameter("instructs", adVarChar, adParamInput, 50 ,cSpecialInstruct)
.parameters.Append .CreateParameter("quote", adVarChar, adParamInput, 59 , trim(cQuoteId))
.parameters.Append .CreateParameter("validdel", adBoolean, adParamInput, 1 , lValidDel)
.parameters.Append .CreateParameter("validcol", adBoolean, adParamInput, 1 , lValidcol)
Set adoRS = .Execute(lRecordsAffected)

  end with  

错误信息:ADODB.Command 错误 '800a0bb9'

参数类型错误、超出可接受范围或相互冲突。 (指向 .CommandType = adCmdText 行) 任何帮助表示赞赏

【问题讨论】:

  • 您的参数是否与您未能在查询中列出的列(字段)的顺序相同?
  • 为任何使用命令对象的人更新。我没有枚举文件,请改用值。

标签: asp-classic command adodb


【解决方案1】:

当值为空时会发生这种情况(vbscript 数据类型)-

您必须确保,例如一个整数值肯定是 NULL 而不是空的...(或 0,1,2...)

您可以编写一个函数来将 vbscript 值“解析”为正确的数据类型,如下所示:

function parse(value, alternative)
    dim val
    val = trim(value & "")
    parse = alternative
    if val = "" then exit function
    on error resume next
    select case varType(parse)
        case 2, 3 'integer, long
            parse = cLng(val)
        case 4, 5 'single, double
            parse = cdbl(val)
        case 6  'currency
            parse = ccur(val)
        case 7 'date
            parse = cDate(val)
        case 11 'bool
            parse = cBool(val)
        case 8 'string
            parse = value & ""
        case else
            on error goto 0
            err.raise 1024, "parse(value, alternative)", "Type is not supported. val:" & value & " alt:" & alternative)
    end select
    on error goto 0
end function

' call of parse function:
cCustcode = parse(cCustcode, "")
'or for an integer:
nWgt = parse(nWgt, 0)

【讨论】:

  • 中肯的评论,此时所有的验证都已经发生并且值很好
  • 好吧,很抱歉浪费您的时间...尝试省略“.CommandType = adCmdText”行?前段时间我有同样的错误,因为我只是不使用 commandType 属性...我知道有一个额外的调用来确定命令的 tpye...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 2010-11-04
  • 2012-02-11
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多