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

时间:2012-07-20 14:10:59

标签: sql database asp-classic db2

有没有人遇到过这样的问题:来自传统ASP页面的SQL查询返回部分结果,但没有错误?

我遇到一种情况,页面上的特定查询(整个系统中的许多查询之一)每次运行时返回不同行数,并始终 less 比“正确”数字,通过直接在服务器上运行SQL来确定。

我认为这可能与连接超时有关(因为这发生在长时间运行的查询中并且我的时间显示它返回非常接近超时),但是我没有收到超时错误。相反,据我所知,它不会导致错误,并返回一个有效的DataSet,代码然后循环以构建结果表。

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

调查

  • 我检查了HTML源代码,以确保没有注入的错误,我错过了所有标记格式正确,并且存在预期的页面元素。这表明从结果中写入特定行并不是错误。 **此外,每次返回的行数不同
  • 我已经验证每次都运行完全相同的查询。
  • 我已经验证了数据库中的数据没有在报告下面变换(它是历史性的,我通过同时运行报告和针对数据库的查询进行交叉检查。)
  • 我尝试手动打印query中的任何错误,但什么都没有。
  • 我已经尝试更改超时(虽然这没有帮助,因为我只能这样做 这在Dev环境中并没有足够的数据 由于this问题,数据库达到超时。)。
  • 预计总共只有大约20行,因此对于非常大的数据集来说不是问题。

是否有人遇到过来自经典asp页面的SQL查询只返回部分结果的情况,有没有办法检查或阻止这种情况?

设置

  • Classic asp web application
  • 大量使用ADODB.Connection个对象连接到DB2服务器后端数据库。
  • 就查询数据而言,数据库静态

共享连接启动如下:

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 个答案:

答案 0 :(得分:1)

尝试向查询添加order by,这样它应该立即发送所有行,您可以排除或解决超时问题