我目前正在处理一个与 Oracle 数据库对话的经典 ASP 项目。我正在尝试找到一种方法来安全地调用 Oracle PL/SQL 脚本并使用 ADO 传递参数。当前的解决方案使用如下嵌入式变量手动构建 SQL 脚本:
strSQL = "SELECT field1, etc FROM my_table WHERE (field = '" & filter_value & "')"
当然,这是丑陋和不安全的,并且容易被滥用。
我到目前为止的代码(从各种非经典的基于 asp 的网站中窃取)看起来像这样:
dim strSQL, oConn, oCommand, oParam
set oConn = server.createobject("ADODB.Connection")
oConn.Open myConnString
strSQL = "SELECT field1, etc FROM my_table WHERE (field = :filter_field)"
dim oFilteredList
set oFilteredList = Server.CreateObject("ADODB.Command")
oFilteredList.ActiveConnection = oConn
oFilteredList.CommandText = strSQL
oFilteredList.CommandType = adCmdText
oFilteredList.NamedParameters = True
set oParam = oFilteredList.CreateParameter("filter_field", adVarChar, adParamInput, 10, filter_value)
oFilteredList.Parameters.Append oParam
set rsResults = oFilteredList.Execute
这会导致错误“参数对象定义不正确。提供的信息不一致或不完整”</p>
使用 ADO 的命名参数调用 Oracle/PL/SQL 的正确方法是什么?我需要使用命名参数,因为实际的 SQL 代码稍微复杂一些,并且在整个 SQL 命令中多次使用不同的参数。