【发布时间】:2013-06-28 20:29:44
【问题描述】:
我有一个充满数据的表,它有五列:id(varchar2)、description(varchar2)、diameter(number)、crown(number) 和 lockout(single char)
该表内置在使用 ASP-classic 制作的 webapp 中。该表在顶部有一行,其标题包含每列的名称。当用户单击标题时,表格会重建,按他们单击的列升序或降序排序,具体取决于先前的方向(如网站上的典型排序按钮)。
我想要发生的事情是:当用户点击除id之外的任何行时,按他们点击的行排序和按id ,因为例如可以有数百条具有相同描述值的记录。
这是我现在确定如何排序的代码的 sn-p。
if Len(strSort) > 0 then
sqlQry = sqlQry + " ORDER BY " & strSort
if intSortDir <> "1" then
sqlQry = sqlQry + " DESC"
end if
end if
strSort是从asp查询url中拉出来的,点击时添加到url中。 intSortDir 基本上初始化为 0 并在用户单击标题时切换。
总而言之,我的问题是,我怎样才能一次按两列排序,单击的那一列是主要排序。
我试过了:
if Len(strSort) > 0 then
if strSort = "id" then
sqlQry = sqlQry + " ORDER BY " & strSort
if intSortDir <> "1" then
sqlQry = sqlQry + " DESC"
end if
else
sqlQry = sqlQry + " ORDER BY " & strSort & ",id"
if intSortDir <> "1" then
sqlQry = sqlQry + " DESC"
end if
end if
end if
它按照我想要的方式排序,但它不允许我切换排序方向。
【问题讨论】:
-
尝试 ORDER BY
-
这看起来你正在做的构建查询将容易受到 sql 注入攻击。啧啧
-
@JoelCoehoorn 我昨天遇到问题时也听说了。我怎样才能避免这种情况?并不是说我很担心,因为它只会在 Intranet 上运行并且不能公开访问,但仍然
-
参数化查询。
-
好的,很高兴知道。我怎样才能使查询可以在不参数化的情况下可变?这对我来说是一次很棒的学习经历。我是否会做一个大量的 switch 语句,以便如果 strSort 是这样,做这个查询,如果是这样,做那个查询?这似乎是一团糟,因为可能有成千上万的潜在查询
标签: html sql oracle asp-classic