【发布时间】:2010-04-16 08:48:47
【问题描述】:
我在经典 ASP Web 应用程序中有一个管理页面,允许管理员用户对数据库运行查询 (SQL Server 2000)
真正奇怪的是,如果您发送的查询中有错误(无效的表连接、您忘记分组的列等),浏览器会挂起(CPU 使用率达到最大值),直到 SERVER 脚本超时超出,然后吐出超时超出错误(服务器和浏览器在不同的机器上,所以不知道这是怎么发生的!)我在 IE 8 和 FF 3 中尝试过,结果相同。
如果您直接从 SQL 企业管理器运行相同的查询(有错误),它会立即返回真正的错误。这是一项安全功能吗?有谁知道如何关闭它?它甚至发生在与数据库的连接使用“sa”凭据时,所以我认为它不是安全设置:(
Dim oRS
Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.ActiveConnection = sConnectionString
// run the query - this is for the admin only so doesnt check for sql safe commands etc.
oRS.Open Request.Form("txtSQL")
If Not oRS.EOF Then
// list the field names from the recordset
For i = 0 to oRS.Fields.Count - 1
Response.Write oRS.Fields(i).name & " "
Next
// show the data for each record in the recordset
While Not oRS.EOF
For i = 0 to oRS.Fields.Count - 1
Response.Write oRS.Fields(i).value & " "
Next
Response.Write "<br />"
oRS.Movenext()
Wend
End If
【问题讨论】:
-
如果创建单独的连接对象,问题是否仍然存在?
-
您是否添加了调试代码以查看 ASP 能走多远?它是否会在 oRS.Open() 上引发错误(应该如此)?
-
如果您使用 ADODB.Connection 和 Execute() 方法会有所不同吗?此外,您可能想尝试将 CommandTimeout 属性设置为相对较低的值,看看是否有帮助。
-
@Alex K & thomask - 在第一个 Response.Write 上抛出 Timeout expired 错误。更改 CommandTimeout 只会使 Timeout Expired 错误更快出现。使用 ADODB.Connection 对象和 Execute() 方法得到相同的响应:(
-
您使用 ODBC 还是 SQLOLEDB 提供程序?
标签: sql-server browser asp-classic iis-6