3

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


%>
4

4 に答える 4

4

SQL インジェクション攻撃の防止に関する MSDN ライブラリの記事のサンプル コードを次に示します。元の URL は見つかりませんが、タイトルのキーワード (ASP での SQL インジェクションの防止) をグーグルで検索すると、すぐにアクセスできるはずです。この実例が役に立てば幸いです。

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 の例

于 2009-07-07T15:07:47.663 に答える
3

この場合、ADO は実際のパラメーター名の代わりに疑問符を予期します。現時点では、SQL "select @something" は実際にはパラメーター化されていません。"@something" は、パラメーターとしてではなく、(宣言されていない) SQL 変数として認識されます。CommandText 行を次のように変更します。

cmd.CommandText = "select ?"

そして、あなたが探している結果が得られると思います。

幸運を!

于 2009-07-07T14:44:50.620 に答える
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
于 2009-07-07T19:08:34.243 に答える
0

あなたのクエリが何を達成しようとしているのかわかりません。また、選択リストでパラメーターが許可されているかどうかもわかりません。MSDN には (おそらく何年も前に) クエリでパラメーターを使用できる場所に関する適切な記事がありましたが、今は見つけられないようです。

OTTOMH さん、パラメータ値を ADO に渡そうとするあなたの試みは正しいように見えます。このようなことをすると、クエリは実行されますか?

SELECT 1 FROM sometable WHERE somefield = @something
于 2009-07-07T14:52:01.560 に答える