【问题标题】:ADO Parameter Error in VBScriptVBScript 中的 ADO 参数错误
【发布时间】:2018-09-03 15:58:10
【问题描述】:

我尝试了很多很多东西,但是在尝试向命令对象添加参数时,不断收到错误 3001(参数类型错误、超出可接受范围或相互冲突)。

Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandText = "ProcName"                
cmd.CommandType = 4 'adCmdStoredProc

MsgBox("0")
'cmd.Parameters.Append(cmd.CreateParameter("@InvoiceNumber", adVarChar, adParamInput, 100, sInvoice))
Set pInvoiceNumber = cmd.CreateParameter("@InvoiceNumber", adVarChar, adParamInput, 100, sInvoice)
cmd.Parameters.Append(pInvoiceNumber)

连接对象在此代码运行时有效且打开。存储过程的@InvoiceNumber 参数是一个varchar(100)。我在这里错过了什么?

【问题讨论】:

  • 更具体地说,错误发生在Set pInvoiceNumber = ...这一行。
  • Set cmd.ActiveConnection = con?
  • @oraclecertifiedprofessional 是的。正如我所提到的,在那一点上它是一个有效且开放的连接对象。这不是正确的做法吗?
  • 我的意思是,问题可能是你没有使用Set
  • 也许您可以通过使用Refresh(): support.microsoft.com/kb/185125 来明确定义参数?

标签: sql-server vbscript ado


【解决方案1】:

我无法重现该问题,但我正在使用 Classic ASP。我发现这篇文章听起来可能是相关的。

VBA: Run-time error 3001 Arguments Are Of The Wrong Type... when setting ADODB.Command object members

似乎 adVarChar 和 adParamInput 常量可能是由于后期绑定的问题。解决方案是将常量添加到 Sub 标头。

如果这不可行,请尝试使用 Oracle Certified Professional 的 Refresh 建议

Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandText = "ProcName"                
cmd.CommandType = 4 'adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters(0).Value  = sInvoice

【讨论】:

  • 您的链接中的解决方案就是这样做的。虽然我也按照@oraclecertifiedprofessional 的建议使用了“Set cmd.ActiveConnection”。
【解决方案2】:

我通过在 asp.page 上的包含库 ADOLib.inc 解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2019-08-06
    相关资源
    最近更新 更多