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 には、引数だけの配列が含まれています。ストアド プロシージャは、さまざまな引数の型と名前を持ついくつかの型の 1 つになる可能性があります。入力が確実にサニタイズされるように、クエリをパラメータ化できる必要があります。何か案は?

4

1 に答える 1

1

この問題は本当に苦痛です。私はデータベースの抽象化を構築する際に苦労しました。Command オブジェクトを実行する前に、不明な型のパラメーターをバインドすることはできませんが、実行時に不明な型の引数の配列を送信することはできます。したがって:

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 に答える