ASP Classic在Paramaterized查询命名参数:必须声明标量变量(ASP Class

2019-06-25 06:54发布

我试着写在ASP经典参数化查询,和它的开始觉得我打我的头靠在墙上。 我收到以下错误:

必须声明标量变量“@something”。

我发誓那是个招呼线做什么,但也许我失去了一些东西...

<% OPTION EXPLICIT %>
<!-- #include file="../common/adovbs.inc" -->
<%

    Response.Buffer=false

    dim conn,connectionString,cmd,sql,rs,parm

    connectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=.\sqlexpress;Initial Catalog=stuff"
    set conn = server.CreateObject("adodb.connection")
    conn.Open(connectionString)

    set cmd = server.CreateObject("adodb.command")
    set cmd.ActiveConnection = conn
    cmd.CommandType = adCmdText
    cmd.CommandText = "select @something"
    cmd.NamedParameters = true
    cmd.Prepared = true
    set parm = cmd.CreateParameter("@something",advarchar,adParamInput,255,"Hello")
    call cmd.Parameters.append(parm)
    set rs = cmd.Execute
    if not rs.eof then
        Response.Write rs(0)
    end if


%>

Answer 1:

下面是关于防止SQL注入攻击的MSDN库文章一些示例代码。 我找不到原来的网址,但谷歌搜索标题关键字(防止SQL注入的ASP)应该让你有足够的快。 希望这个真实世界的例子帮助。

strCmd = "select title, description from books where author_name = ?"
Set objCommand.ActiveConnection = objConn
objCommand.CommandText = strCmd
objCommand.CommandType = adCmdText
Set param1 = objCommand.CreateParameter ("author", adWChar, adParamInput, 50)
param1.value = strAuthor
objCommand.Parameters.Append param1
Set objRS = objCommand.Execute()

请参阅MSDN上的以下页面,接近底部,具体提到命名参数。

例如MSDN



Answer 2:

ADO是要指望问号,而不是在这种情况下,实际的参数名称。 眼下,SQL“选择@something”实际上不是参数:它看到了“@something”作为一个(未申报)SQL变量,而不是作为一个参数。 你的CommandText线改成这样:

cmd.CommandText = "select ?"

我认为你会得到你正在寻找的结果。

祝好运!



Answer 3:

with server.createobject("adodb.command")
  .activeConnection = application("connection_string")
  .commandText = "update sometable set some_col=? where id=?"
  .execute , array(some_value, the_id)
end with


Answer 4:

我不知道你的查询意图完成。 我也不能确定参数允许在选择列表中。 MSDN曾经有过(很多年前,大概)在哪里参数被允许在查询一个像样的文章,但似乎我现在不能找到它。

OTTOMH,您提供的参数值ADO尝试看起来是正确的。 请问,如果你这样做你的查询执行?

SELECT 1 FROM sometable WHERE somefield = @something


文章来源: ASP Classic Named Parameter in Paramaterized Query: Must declare the scalar variable