是否有可能在不事先知道参数的名称,类型或数量的情况下构建VBscript参数化查询?
我正在尝试这样做:
set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = cn
cmd.commandText = proc
cmd.commandType = 4
cmd.Parameters.Refresh
For i = 0 To UBound(params)
cmd.Parameters(i).Value = params(i)
Next
set rs = cmd.Execute
这给了我错误:
ADODB.Parameter error '800a0d5d' Application uses a value of the wrong type for the current operation
我试图解析的参数字符串是'arg1','arg2'等形式.Params包含一个只有args的数组。存储过程可以是几种类型之一,具有不同的参数类型和名称。我需要能够参数化查询以确保输入被清理。有什么想法吗?
答案 0 :(得分:0)
这个问题真的很痛苦 - 我在构建一些数据库抽象时遇到了这个问题。事实证明,在执行它之前,您无法将未知类型的参数绑定到Command对象,但是可以在执行它时发送未知类型的args数组。因此:
dim cmd: set cmd = Server.createObject("adodb.command")
cmd.commandText = "select * from Foo where Bar = ?"
set cmd.activeConnection = …
dim rs: set rs = cmd.execute(, Array(42))
如果要将未知类型的参数绑定到命令,则必须编写自己的内部使用此方法的命令类。我最终编写了自己的数据库抽象类,以便查询语法为:
dim rs: set rs = myDB.query("select * from Foo where Bar = ?", Array(42))