从经典asp中的数据库查询返回的部分数据

从经典asp中的数据库查询返回的部分数据

问题描述:

有没有人遇到过一个问题,即传统ASP页面的SQL查询返回部分结果,但没有错误?从经典asp中的数据库查询返回的部分数据

我有其中一个页面(在整个系统中的许多之一)在一个特定的查询返回每次运行时间不同行数的情况下,始终比“正确”的数量少如通过直接在服务器上运行SQL所确定的那样。我认为这可能与连接超时有关(因为这发生在长时间运行的查询中,而且我的计时表明它返回的时间非常接近超时),但我没有收到超时错误。相反,据我所知,它不会导致错误,并返回代码然后循环生成结果表的有效DataSet

由于没有迹象表明发生了错误,因此没有暗示数据不完整,这意味着用户不能再信任此报告。通常在这个系统中,对于“大型”查询,SQL超时经常发生,我们会在页面上显示错误消息。

调查

  • 我已经检查HTML源代码,以确保没有错误注入的我失踪,所有标签都能很好地形成,并且预期的页面元素存在。这表明从结果中写入特定行并不是错误。 **此外,每次返回的行数为不同
  • 我已验证每次都运行完全相同的查询。
  • 我已经验证数据库中的数据不是在报告下面的changin(这是历史性的,我通过同时运行报告和针对数据库的查询进行了交叉检查。)
  • I'我试图手动打印来自query的任何错误,但什么都没收。
  • 我试过改变超时时间(虽然这没有帮助,因为我只能在开发环境中执行 ,并且由于this问题,在 数据库中没有足够的数据来达到超时。) 。
  • 预计只有大约20行,所以不是一个非常大的数据集的问题。

有没有人遇到的情况下,从一个传统的ASP页面的SQL查询只返回部分结果,以及有没有什么办法来检查或防止出现这种情况?

设置

  • 经典asp网络应用
  • 整个ADODB.Connection对象的大量使用,用于连接到DB2服务器后端数据库。
  • 就查询数据而言,数据库为static

共享连接动初始化如下:

connString = "Provider=MSDASQL.1;User ID=xxx;Data Source=XXX;Extended Properties=""DSN=XXX;UID=XXX;PWD=XXX;""" 
Set conn = Server.CreateObject("ADODB.Connection") 
Set cmd = Server.CreateObject("ADODB.Command") 
conn.Mode = adOpenReadOnly 
conn.Open connString 
cmd.ActiveConnection = conn 
cmd.CommandTimeout = 600 

用法如下:

query = " SELECT blah FROM Foo WHERE ... " ' big long list of clauses defined from user selections. 
cmd.CommandText = sql 
Set oRs = cmd.Execute 

Resposne.Write "<table>..." ' Write table headers here' 
Do while (Not oRs.eof) 
    Response.Write "<tr>...</tr>" ' WRite details from oRs here 
    oRs.MoveNext 
Loop 
Response.Write "</table>" 
+1

如果有错误,你怎么验证?使用经典的ASP,错误消息往往会被注入到HTML中,并且如果它们被嵌入到特定的标记中,它们可以隐藏起来。您在检查错误时是否检查页面的源HTML? – mellamokb 2012-07-20 14:14:26

+0

@mellamokb确切地说,页面的源代码看起来很干净并且格式良好,即:没有可见的错误和所有期望的页面元素。 – xan 2012-07-20 14:17:28

+0

甚至包括''关闭标签? – mellamokb 2012-07-20 14:18:00

尝试添加order by到查询,这样,它应立即将所有行,你可以在规则或出超时问题

+0

接受这个答案,因为它给了我,我没有想到的解决方法。 – xan 2012-07-23 09:01:03