Asp classic 而ASP经典页面中的循环超时

Asp classic 而ASP经典页面中的循环超时,asp-classic,recordset,Asp Classic,Recordset,我的老板在10年前编写了这个非常复杂的软件,并要求我将它迁移到一个新的IIS7服务器上,我刚刚在VPS上安装了这个服务器。我设法让一切顺利进行,除了一个小循环超时并将CPU发送到100% 罪魁祸首是: rs_ss.open从forte01中选择不同的idMC、idUtente、Categoria。RisorseS其中idMC=&request.querystringidmc&和idUtente=&sessionidute&按conn的Categoria排序 如果不是rs_ss.eof,则 不做就

我的老板在10年前编写了这个非常复杂的软件,并要求我将它迁移到一个新的IIS7服务器上,我刚刚在VPS上安装了这个服务器。我设法让一切顺利进行,除了一个小循环超时并将CPU发送到100%

罪魁祸首是:

rs_ss.open从forte01中选择不同的idMC、idUtente、Categoria。RisorseS其中idMC=&request.querystringidmc&和idUtente=&sessionidute&按conn的Categoria排序 如果不是rs_ss.eof,则 不做就做 “康塔·格利·德拉·索托塞齐翁元素酒店 rse.filter=categoria='&rs\u sscategoria&' 如果不是rse.eof,则 n=0 不要使用rse.eof rse.movenext n=n+1 环 rse,先移动 r=1 不要使用rse.eof dettagliarisorse,s_ss,r,n r=r+1 rse.movenext 环 如果结束 rse.filter= 下一步 环 如果结束 关闭 如果我只是删除或注释掉中心部分,如下所示:

rs_ss.open从forte01中选择不同的idMC、idUtente、Categoria。RisorseS其中idMC=&request.querystringidmc&和idUtente=&sessionidute&按conn的Categoria排序 如果不是rs_ss.eof,则 不做就做 下一步 环 如果结束 关闭 它一直这样做


在旧域上,它可以正常工作。知道为什么吗?

这取决于代码顶部查询中返回的数据。如果它返回了很多行,那么计算行的速度会非常慢。重写查询以计算categoria的出现次数,这样您就不会在代码中执行该操作,这样您就可以在n=n+1附近删除该循环

此外,顶部的查询有一个很大的“不”字!您正在将原始查询字符串值直接传递到内联SQL查询中。这是易受SQL注入攻击的代码示例。通过查询字符串idmc传递的值可以很容易地用作SQL注入攻击的入口点。如果这是一个整数,至少将其包装在一个函数中,该函数不允许将自由格式文本传递给内联SQL。i、 e

CInt(Trim(request.querystring("idmc")))

问题在于Sql Server用户权限。用户没有访问该特定架构的权限。

谢谢Marietta。我知道这是草率的编码,但它不是我的,我不允许修改太多。转义所有原始字符串/使用参数并在200多个写得很糟糕的经典asp文件中重写查询将是一场噩梦。我没有被要求这样做,我也不打算在没有我的老板批准的情况下这样做,他也是代码的作者。事实证明,问题不在于代码,而在于Sql Server用户权限。用户无法访问RisorseS表的架构。