0

次のように、パラメータ化されたSQLクエリ文字列を使用して従来のASPを使用しています。

SQL = "SELECT * FROM content WHERE Category LIKE ? ORDER BY SubDate ?"

SQLクエリ文字列は、次のパラメータ化されたコードで使用されています。

Set cmd = Server.CreateObject("ADODB.Command")
Set rsView = Server.CreateObject("ADODB.Recordset")
cmd.ActiveConnection = MM_connContent_STRING
cmd.Prepared = true
cmd.CommandType = adCmdText
cmd.CommandText = SQL
cmd.CommandTimeout = 60

cmd.Parameters.Append(cmd.CreateParameter("Category", 202, adParamInput, 30, qFilter))
cmd.Parameters.Append(cmd.CreateParameter("SubDate", 202, adParamInput, 10, myDateSort))

rsView.CursorLocation = adUseClient
rsView.Open cmd, , adOpenForwardOnly, adLockReadOnly

上記のコードは、1つの大きな問題を除いてうまく機能します。「ORDERBYSubDate?」パーツは「ORDERBYSubDate'DESC'」を出力します。DESCはパラメーターであるため、その周囲に一重引用符が追加されています。上記のコードを実行すると、DESC(ユーザーが選択してURLクエリ文字列を介して送信するものによってはASCになることもあります)を一重引用符で囲むため、構文エラーが発生します。すべてのSQLパラメータが一重引用符で出力されているようです。特定のSQLパラメータから一重引用符を削除して、SQL文字列に構文エラーが発生しないようにするにはどうすればよいですか?

4

1 に答える 1

4

キーワード(またはそのことについては識別子)をパラメーターにすることは非常にまれです。私が知っている、それをサポートする単一のフレームワークはありません。

許容値は2つしかないので、単純に次のように記述してみませんか。

SQL = "SELECT * FROM content WHERE Category LIKE ? ORDER BY SubDate "
If myDateSort = "ASC" Or myDateSort = "DESC" Then
    SQL = SQL & myDateSort
Else
    'whoops, value not allowed. raise error... 
End If
'...rest of your code... 
于 2012-07-17T08:07:40.570 に答える