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

上面的代码很好用,除了一个大问题。“按子日期排序?” 部分输出“ORDER BY SubDate '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 回答