使用输入参数调用SQL存储过程

使用输入参数调用SQL存储过程,sql,vbscript,parameters,procedure,Sql,Vbscript,Parameters,Procedure,我需要编写一个小VBScript来调用带有输入变量的SQL过程。我没有太多的VBscript经验,我遇到了一个无法解决的错误。我收到的错误是: onnerRecord(第14行):[ODBC Firebird驱动程序][Firebird]过程测试的动态SQL错误输入参数不匹配 我编写的VBScript是: Const Connection=“DRIVER=Firebird/InterBase(r)DRIVER;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Users\wo

我需要编写一个小VBScript来调用带有输入变量的SQL过程。我没有太多的VBscript经验,我遇到了一个无法解决的错误。我收到的错误是:

onnerRecord(第14行):[ODBC Firebird驱动程序][Firebird]过程测试的动态SQL错误输入参数不匹配

我编写的VBScript是:

Const Connection=“DRIVER=Firebird/InterBase(r)DRIVER;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Users\wouter\FOR-TESTING.fdb;”
常量adParamInput=1
常数adInteger=3
设置myConn=CreateObject(“ADODB.Connection”)
myConn.开放连接
设置spCommand=CreateObject(“ADODB.Command”)
spCommand.Commandtext=“测试”
spCommand.CommandType=4
Set parameter=spCommand.CreateParameter(,adInteger,adParamInput,4,5)
设置spCommand.ActiveConnection=myConn
spCommand.Execute
麦肯,完毕
此VBscript正在调用以下过程:

创建或更改过程测试(ID整数)
作为开始
更新材料标签集打印='T',处理日期=当前时间戳
其中ID=:ID;
结束

ID INTEGER
应该是一个变量输入,但是为了测试代码,我使用了数值5。我认为这与需要不同类型输入的过程有关,但我找不到输入类型。

我使用不同的方法插入数值,解决了这个问题:

Const Connection = "DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Users\wouter\FOR-TESTING.fdb;"
Set myConn = CreateObject("ADODB.Connection")

myConn.Open Connection

SQL = "execute procedure TEST 5"
Set dbconn = CreateObject("ADODB.Connection")
dbconn.Open connection
dbconn.Execute(SQL)
myConn.Close
--更新--

自从Ansgar Wiechers和Mihai Adrian给了我错误的原因,Geert bellekens警告了我SQL注入的风险,我已经尝试将“附加行”添加到我的VBScript中,这也非常有效

在此,我完成的VBScript:

Const Connection = "DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=C:\Users\wouter\FOR-TESTING.fdb;"
Const adParamInput = 1
Const adInteger = 3
Set myConn = CreateObject("ADODB.Connection")
myConn.Open Connection

Set spCommand = CreateObject("ADODB.Command")
spCommand.Commandtext = "TEST" 
spCommand.CommandType = 4

Set parameter = spCommand.CreateParameter(, adInteger, adParamInput, 4, 5)
spCommand.Parameters.Append parameter

Set spCommand.ActiveConnection = myConn
spCommand.Execute 
myConn.Close

谢谢大家!

正如Ansgar Wiechers所说,您必须将参数附加到存储过程中:

spCommand.Parameters.Append parameter

您创建了一个参数,但从未将其添加到查询中,因此实际上调用存储过程时没有它所期望的参数。我更喜欢您以前的方法的可能重复->SQL注入没有风险。这似乎是一个更好的办法,尝试让参数工作起来。根据建议调整答案。