排序表而不调用数据库

时间:2014-07-21 15:12:58

标签: sql sql-server asp-classic

我正在研究遗留系统(经典ASP),其中原始代码将执行内联动态查询(基于用户输入)以确定排序顺序。例如:

Dim query = "Select * from empTable order by " & //some user input

除了潜在的SQL注入之外,这种方法的另一个问题是,每次用户想要对结果进行排序时,它都会调用数据库。 (因此 - 我的老板声称 - 会导致一些性能问题)。

我建议使用array来存储查询的返回结果(然后在array内排序)但管理层未批准(我不知道原因)。我也不能使用Javascript。我的主管告诉我要探索XML元素。所以我的问题是:

  1. 如何在不调用数据库的情况下帮助排序结果?
  2. 如果没有,我的其他选择是什么?
  3.   

    编辑:所以根据我的主管,调用IIS服务器很好,但调用数据库服务器是不可接受的。

2 个答案:

答案 0 :(得分:0)

您可以将样式应用于XML元素。

像这样的东西(来自w3schools.com):

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
      <xsl:sort select="artist"/>
      <tr>
        <td><xsl:value-of select="title"/></td>
        <td><xsl:value-of select="artist"/></td>
      </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>

供参考: 数组不是“排序”友好的。 您应该使用Collections实现之一。

答案 1 :(得分:0)

如果结果全部显示在一个页面上,那么使用JavaScript重新排序客户端的结果将是理想的,但是你提到不允许使用JavaScript。

因此,如果您无法使用JavaScript而无法进行其他数据库调用,那么您唯一的选择就是将结果存储在某处以便在服务器端重新排序。

选项1:您可以将结果以某种格式(可能是JSON?)存储在隐藏字段中,然后将其发布回服务器以进行重新排序,然后重新显示。

选项2:您可以将结果以某种格式(可能是数组)存储在服务器端的Session变量中。或者,您可以以某种格式(可能的XML)将其本地存储在文件系统中。

选项3:将结果输出到XML文件,并使用XSL对输出进行样式设置和排序。

对于选项1和2,您需要编写一些代码来在Classic ASP中进行排序。希望您的订购只在一个领域!

如果要存储大量数据,选项1可能会使页面呈现和回发非常慢。

如果要存储大量数据并且很多人使用该页面,选项2可能会对服务器的内存和影响性能提出很高的要求。

由于选项1和2都需要对结果进行服务器端排序,因此也会影响服务器性能。

选项3不会对用户友好,但我不知道你有哪种类型的用户。

数据库通常是完成此操作的最佳位置。如果存在性能问题,那么您/他们应该关注索引或数据库结构改进。