ASP Classic Response缓冲区超出错误

时间:2011-12-21 14:59:09

标签: asp-classic buffer response

这段代码一直工作到现在为止我一直得到缓冲区超出错误。我很肯定有一个更好的方法来做到这一点,但我不知道如何。

我要做的是显示从当前日期到两周的任何条目。用户可以在该两周内输入任何日期,该表将填充默认“绿色”范围之间或之后的空格。我把它工作到今天。我没有在三周内触及它,我不知道发生了什么。我是一个低级平面设计师,老板不知道html / css和asp / sql驱动的应用程序之间的区别。在我疯了之前请帮忙......

        <div class="cond_holder">
        <div class="dir_name">PEDS CARDIOLOGY</div>
<%
        Dim this_day_peds_cardio
        this_day_peds_cardio = Date

        Dim Conditions_peds_cardio
        Dim Conditions_peds_cardio_cmd
        Dim Conditions_peds_cardio_numRows

        Set Conditions_peds_cardio_cmd = Server.CreateObject ("ADODB.Command")
        Conditions_peds_cardio_cmd.ActiveConnection = MM_webdbs_STRING
        Conditions_peds_cardio_cmd.CommandText = "SELECT * FROM dbo.ryg_conditions WHERE aoc='1' AND Day >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) ORDER BY aoc ASC, Day ASC" 
        Conditions_peds_cardio_cmd.Prepared = true

        Set Conditions_peds_cardio = Conditions_peds_cardio_cmd.Execute
        Conditions_peds_cardio_numRows = 0

        Dim Repeat_peds_cardio__numRows
        Dim Repeat_peds_cardio__index

        Repeat_peds_cardio__numRows = 14
        Repeat_peds_cardio__index = 0
        Conditions_peds_cardio_numRows = Conditions_peds_cardio_numRows + Repeat_peds_cardio__numRows

        While ((Repeat_peds_cardio__numRows <> 0) AND (NOT Conditions_peds_cardio.EOF)) 
            If DateDiff("d", (Conditions_peds_cardio.Fields.Item("Day").Value), this_day_peds_cardio)=0  Then
%>
                <span class="daily_condition <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%>">
                    <span style="display: none;"><%=(Conditions_peds_cardio.Fields.Item("aoc").Value)%></span>
                    <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%>
                    <span class="reason"><%=(Conditions_peds_cardio.Fields.Item("reasoning").Value)%></span>
                </span><!-- /.daily_condtion -->
<%
                this_day_peds_cardio = DateAdd("d", 1, this_day_peds_cardio)
            Else 
                While DateDiff("d", (Conditions_peds_cardio.Fields.Item("Day").Value), this_day_peds_cardio)<>0
%>  
                    <span class="daily_condition GREEN">GREEN</span><!-- SPACER -->
<%
                    this_day_peds_cardio = DateAdd("d", 1, this_day_peds_cardio)
                Wend
%>
                <span class="daily_condition <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%>">
                    <span style="display: none;"><%=(Conditions_peds_cardio.Fields.Item("aoc").Value)%></span>
                    <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%>
                    <span class="reason"><%=(Conditions_peds_cardio.Fields.Item("reasoning").Value)%></span>
                </span><!-- /.daily_condtion -->

<%
                this_day_peds_cardio = DateAdd("d", 1, this_day_peds_cardio)
            End if

            Repeat_peds_cardio__index=Repeat_peds_cardio__index+1
            Repeat_peds_cardio__numRows=Repeat_peds_cardio__numRows-1
            Conditions_peds_cardio.MoveNext()
        Wend

        While loop_ctr_peds_cardio < 14
%>
            <span class="daily_condition GREEN">GREEN</span><!-- FILLER -->
<%
            loop_ctr_peds_cardio = loop_ctr_peds_cardio +1
        Wend
%>
    </div><!-- /#cond_holder -->

2 个答案:

答案 0 :(得分:0)

当我阅读你的源代码时,我提出了两个想法:

  1. 您使用太多脚本标记(&lt; %%&gt;),甚至分离vbscript代码。这种过度使用使您难以阅读和理解您的代码。我必须将您的源代码粘贴到Notepad ++中以整理和阅读您的代码。
  2. 第一次查询时没有使用记录集。如果要循环选择Selectquery的结果,请使用记录集对象。处理和防止一些一般错误更加谨慎。记录集的使用是否会消除您的错误?
  3. 解决您的问题:

    您使用的是IIS6.0或更高版本吗?如果是这样,那么以下想法可能有所帮助(我从微软的德国网站获得它,发布在stackoverflow.com(见here)。理想是:

    • 使用Response.Flush()
    • 关闭页面上或整个网站上的Response.Buffer。 任何ASP代码之前页面顶部的Response.Buffer = False
    • 增加缓冲区的大小(请参阅“查看此处”位置的链接)。
    • 缩小回复的大小。

答案 1 :(得分:0)

您的响应缓冲区溢出的原因是您现在有更多数据要显示。对它进行排序的最快方法应该是在while循环中每隔几行左右发出一次Response.Flush(取决于响应缓冲区的大小)。关闭响应缓冲区几乎总会导致页面渲染时间变长,特别是如果你有很多像你这样的上下文切换。