有没有人遇到过来自经典 ASP 页面的 SQL 查询返回部分结果但没有错误的问题?
我有一种情况,页面上的特定查询(整个系统中的许多查询之一)每次运行时返回不同数量的行,并且总是小于“正确”数量,这是通过针对直接服务器。
我认为这可能与连接超时有关(因为这发生在长时间运行的查询中,并且我的时间显示它返回的时间非常接近超时),但我没有收到超时错误。相反,据我所知,它不会导致任何错误,并返回一个有效值DataSet
,然后代码会循环该值以构建结果表。
由于没有迹象表明发生了错误,因此没有迹象表明数据不完整,这意味着用户不再信任此报告。通常在这个系统中,对于“大”查询确实经常发生 SQL 超时,我们会在页面上显示错误消息。
调查
- 我检查了 HTML 源代码,以确保没有我遗漏的注入错误,并且所有标签的格式都正确,并且存在预期的页面元素。这表明从结果中写入特定行不是错误。** 此外,每次返回的行数都不同。
- 我已经验证每次都在运行完全相同的查询。
- 我已经验证数据库中的数据在报告下没有变化(它是历史数据,我已经通过同时运行报告和对数据库的查询进行了交叉检查。)
- 我尝试手动打印查询中的任何错误,但一无所获。
- 我尝试更改超时(尽管这没有帮助,因为我只能在开发环境中执行此操作,并且由于此问题,数据库中没有足够的数据来达到超时。)。
- 预计总共只有大约 20 行,因此对于非常大的数据集来说不是问题。
有没有人遇到过来自经典 asp 页面的 SQL 查询只返回部分结果的情况,有没有办法检查或防止这种情况?
设置:
- 经典的asp网页应用
- 大量使用
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>"