VBScript构建参数化查询

时间:2009-10-13 02:45:16

标签: vbscript parameterization

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

1 个答案:

答案 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))