1

是否可以在事先不知道参数的名称、类型或数量的情况下构建 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 的数组。存储过程可以是多种类型之一,具有不同的参数类型和名称。我需要能够对查询进行参数化以确保对输入进行清理。有任何想法吗?

4

1 回答 1

1

这个问题真的很痛苦——我在构建一些数据库抽象时遇到了这个问题。事实证明,在执行它之前,您不能将未知类型的参数绑定到 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))
于 2009-10-17T09:04:37.253 回答