加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在Classic ASP中从ADODB调用参数化Oracle查询

发布时间:2020-12-16 03:18:27 所属栏目:asp.Net 来源:网络整理
导读:我目前正在开发一个与Oracle数据库交谈的经典ASP项目.我正试图找到一种方法来安全地调用Oracle PL / SQL脚本并使用ADO传递参数.当前的解决方案使用嵌入式变量手动构建SQL脚本,如下所示: strSQL = "SELECT field1,etc FROM my_table WHERE (field = '" filte
我目前正在开发一个与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?如果它没有被声明为String或者你已经分配了一个超过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;"`

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读