Asp classic 未显示asp错误

Asp classic 未显示asp错误,asp-classic,Asp Classic,我已将一个sql数据库从一台服务器移动到一个分离/连接的新服务器 现在我经历了一些奇怪的行为,因为它不工作,但没有显示错误 这是密码 <% const database_dsn="PROVIDER=SQLNCLI10; SERVER=FR-2626\SQLLOP;DATABASE=Lop;Uid=admin-sql;Pwd=xxxx;" response.write "Step 0//" set conn=server.CreateObject("ADODB.Connection")

我已将一个sql数据库从一台服务器移动到一个分离/连接的新服务器

现在我经历了一些奇怪的行为,因为它不工作,但没有显示错误

这是密码

<%
const database_dsn="PROVIDER=SQLNCLI10; SERVER=FR-2626\SQLLOP;DATABASE=Lop;Uid=admin-sql;Pwd=xxxx;" 

response.write "Step 0//"

set conn=server.CreateObject("ADODB.Connection")
set RS=server.CreateObject("ADODB.Recordset")

conn.Open database_dsn

response.write "Step 1//"
req = "Select count(*) From tblArticleList"

response.write "Step 2//"
set RS = conn.Execute(req)

response.write  "Step 3//"

%>
程序在步骤2停止;然后不显示任何内容,不显示任何错误

我只是不知道该怎么办我怎么会出错呢

谢谢
乔纳森

哦,我找到了错误显示的部分答案


在IIS目录配置的调试窗格中,不应选中启用ASP调试…尽管我认为它应该…

我认为服务器有一个GetLastError方法,您可以检查该方法以找出在运行任何语句时发生的错误

e、 g.出现错误时,继续下一步 .... 可能导致错误的语句。。。。 errorObject=Server.GetLastError


对于AsError对象,请参考

您是否已将浏览器设置为显示友好的http错误?这与您已经确定的内容相结合,是我没有看到错误消息的常见原因


Shahkaplesh还说得对,您可以使用Server.GetLastError获取发生的最后一个错误,但在本例中不需要这样做。

执行查询时,不使用Set命令。我不知道为什么它没有向您显示任何内容,但您的代码应该更像这样:

<%
const database_dsn="PROVIDER=SQLNCLI10; SERVER=FR-2626\SQLLOP;DATABASE=Lop;Uid=admin-sql;Pwd=xxxx;" 

response.write("Step 0//")

set conn=server.CreateObject("ADODB.Connection")
set RS=server.CreateObject("ADODB.Recordset")

conn.Open database_dsn

response.write("Step 1//")
req = "Select count(*) From tblArticleList"

response.write("Step 2//")
RS = conn.Execute(req)

response.write("Step 3//")
%>

是的,响应上的括号。Write是可选的。但我就是这样的OCD,它使故障排除变得更容易。

实际上并不意味着令人不快,但是的,您确实需要一个集合,因为您正在设置一个对象类型,并且可能希望在某个时候使用返回值,如果这不仅仅是一个测试脚本,它看起来像我

顺便说一句,括号在响应中并不正确。请编写,因为它不返回值。它们只适用于单参数sub,因为可以在表达式周围任意位置放置括号

例如:


您需要放置错误检查代码来找出实际的错误可能是什么。 我建议您更改代码如下:

<%
const database_dsn="PROVIDER=SQLNCLI10; SERVER=FR-2626\SQLLOP;DATABASE=Lop;Uid=admin- sql;Pwd=xxxx;"

'Its very important to add this line!!! '
On Error Resume Next
'Its very important to add this line!!! '

response.write "Step 0//"

set conn=server.CreateObject("ADODB.Connection")
set RS=server.CreateObject("ADODB.Recordset")

conn.Open database_dsn

if err.number<>0 then
    response.write err.description
end if

response.write "Step 1//"
req = "Select count(*) From tblArticleList"

response.write "Step 2//"
set RS = conn.Execute(req)

if err.number<>0 then
    response.write err.description
end if

response.write  "Step 3//"

%>

我并不是要踢死一匹马,但我正在对一个Oracle数据库做类似的事情,我有两个幻觉问题,我还没有确定根本原因,但有两件事让它们消失了。 1.命名查询中的所有列,并为任何计算出的列命名为sum、count、avg等,这样您的查询将成为

req = "Select count(*) NumRows From tblArticleList"
二,。在对cstr的调用中包装我的查询字符串导致result.EOF标志正确填充,而不是返回空值或null值,从而导致简单的DO WHILE NOT result.EOF某个操作循环创建无限循环,直到web请求超时。例如

response.write "Step 2//"
set RS = conn.Execute(cstr(req))

没什么大不了的,如果你陷入困境,找不到原因,就给你一些提示。不过,请遵循上面的调试建议,这是一个很好的信息

try-req=从TBLARTICLELIST中选择top 2*在打开连接之前尝试强制超时conn.ConnectionTimeout=200所以请编辑并添加要从和迁移到的SQL版本…一个建议!我曾经在IE中为一些页面清空sreen,而源代码实际上有错误消息,所以请尝试查看您正在获取的页面的源代码。显示友好的HTTP错误不会显示任何内容,它只是不会显示任何值得一看的内容。
response.write "Step 2//"
set RS = conn.Execute(cstr(req))