gpt4 book ai didi

oracle - 在经典 ASP 中从 ADODB 调用参数化 Oracle 查询

转载 作者:行者123 更新时间:2023-12-02 09:04:13 27 4
gpt4 key购买 nike

我目前正在开发一个与 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

这会导致错误“参数对象定义不正确。提供的信息不一致或不完整”

从 ADO 中使用命名参数调用 Oracle/PL/SQL 的正确方法是什么?我需要使用命名参数,因为实际的 SQL 代码有些复杂,并且在整个 SQL 命令中多次使用不同的参数。

最佳答案

如何定义filter_value?如果它没有声明为字符串,或者您分配的字符串长度超过 10 个字符(如您在创建参数时指出的那样),则会遇到问题。

此外(部分供我自己引用),OraOLEDB 不支持命名参数(即 ADODB)。

参见Oracle® Provider for OLE DB Developer's Guide 11g Release 1 (11.1)或点击任何 previous versions 上的“命令参数”标题链接(8iR3、9i、9iR2、10g、10gR2):

Command Parameters

When using Oracle ANSI SQL, parameters in the command text are preceded by a colon. In ODBC SQL, parameters are indicated by a question mark (?).

OraOLEDB supports input, output, and input and output parameters for PL/SQL stored procedures and stored functions. OraOLEDB supports input parameters for SQL statements.

"Note: OraOLEDB supports only positional binding."

也就是说,在使用 OraOLEDB 时,这应该不会影响您的查询:

oFilteredList.NamedParameters = True

我已经成功地在 Oracle 10gR2 上运行了查询,与示例的其余部分所示完全一样。

您没有显示您的连接字符串,因此我必须假设它是有效的。行为可能会根据那里的选项而有所不同,所以这是我成功使用的:

`"Provider=OraOLEDB.Oracle;Data Source=TNSNAMES_ENTRY;User ID=XXXX;Password=YYYY;DistribTx=0;"`

关于oracle - 在经典 ASP 中从 ADODB 调用参数化 Oracle 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1135117/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com