我已将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停止;什么都没有,没有显示错误...
我只是不知道该怎么做。我怎么会得到一些错误?
由于 乔纳森
答案 0 :(得分:1)
哦,我部分找到了错误显示的答案。
在IIS目录配置的“调试”窗格中,不应该检查启用ASP调试...虽然我认为它应该...
答案 1 :(得分:1)
您是否已将浏览器设置为“显示友好的http错误”,这与您已识别的内容一起是我没有看到错误消息的常见原因。
Shahkaplesh也是对的,您可以使用Server.GetLastError()来获取发生的最后一个错误,但在此示例中您不需要这样做。
答案 2 :(得分:1)
执行查询时,不要使用“设置”命令。我不知道为什么它没有向你显示任何内容,但你的代码看起来应该更像这样:
<%
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//")
%>
是的,“Response.Write”上的括号是可选的。但我就是这样的OCD,它使故障排除更容易。
答案 3 :(得分:1)
您需要放置错误检查代码以找出实际错误可能是什么。 我建议您改变代码:
<%
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//"
%>
答案 4 :(得分:1)
不要踢死马,但是我在Oracle数据库上做了类似的事情,而且我还有两个幻象问题,我还没有确定根本原因,但这里有两件事他们走了。
1.将查询和别名中的所有列命名为计算的任何列(总和,计数,平均等)。因此,您的查询将成为
req = "Select count(*) NumRows From tblArticleList"
2。在对cstr的调用中包装我的查询字符串会导致result.EOF标志被正确填充而不是返回一个空值或空值导致一个简单的DO WHILE NOT result.EOF一些Action LOOP创建一个无限循环,直到web请求时间到。例如,
response.write "Step 2//"
set RS = conn.Execute(cstr(req))
如果你遇到困难并且找不到原因,那么只有几个提示没什么大不了的。按照上面的调试建议,这是一个很好的信息。
答案 5 :(得分:0)
我认为Server有一个GetLastError方法,您可以检查该方法以查找运行任何语句时发生的错误。
e.g。接下来错误恢复 ....可能导致错误的陈述.... errorObject = Server.GetLastError()
对于ASPError对象,请参阅http://www.w3schools.com/asp/asp_ref_error.asp
答案 6 :(得分:0)
实际上并不意味着不愉快,但是你确实需要一个Set,因为你正在设置一个对象类型,并且可能想要在某个时候使用返回值(如果这不仅仅是一个测试脚本,它看起来像我。)
另外btw括号在Response.Write()中并不正确,因为它不返回值。它们只适用于单个参数subs,因为您可以将括号放在表达式的任何位置。
例如:
a = (b)
Response.Write ((("test"))&(1))