网站首页/技术开发列表/内容

提高浏览器的调试能力

技术开发2021-04-09阅读
FrontPage 2000和 Visual IntDev 6.0是微软公司提供的开发 Web工程的有力工具,它们能大大提高程序员的工作效率。我们可以用 FrontPage 2000设计制作网页界面,用 Visual IntDev 6.0给网页添加 VBScript或 Java Script脚本程序,以及在网页中嵌入 COM组件,使之成为功能强大的 ASP页面。

问题的提出

通常我们可以用浏览器(最好用 IE 5.0以上版本)调试页面,以排除程序中的错误。不过,在开发实践中,笔者发现浏览器对 ASP页面的调试能力不太理想,尤其是当 ASP页面中含有对数据库操作的脚本代码时,效果更不理想。

例如,某个程序中含有如下代码段:

<%

strConnString =“ Provider=SQLOLEDB.1;Password=mypassword;”&“ Persist Security Info=True;User ID=myuid;”&“ Initial Catalog=mydbname;”&“ Data Source=myserver;Connect Timeout=15”

Set conn1 = Server.CreateObject(“ ADODB.Connection” )

Conn1.Open strConnString

q=“ insert into students (xm,xh) values(‘张三’ ,‘ S001’ )”

conn1.Execute (q)

% >

此段代码首先建立起连接对象 conn1与 mydbname数据库的连接,然后向学生表( students)中插入姓名( xm)为“张三”、学号( xh)为“ S001”的记录。假如学生表中学号为“主键”,且表中已有学号为“ S001”的记录存在,那么这一插入操作必定会因主键冲突而出错。但是,当我们用浏览器浏览该页面时,浏览器只会提示该页面的第 8行(即 conn1.Execute (q)行)出错,并不会告诉我们究竟具体发生了什么错误。因此,在大部分情况下,我们不得不再借助于 Visual IntDev 6.0内嵌的查询分析工具( Query)或 SQL Server的查询分析器等工具来做进一步的调试,不过,这样做往往比较费时、费力。所以,如何直接提高浏览器的调试能力,就成为解决问题的关键。

问题的解决

为提高浏览器的调试能力,我们可以利用它的输出功能,在 ASP页面中插入一段捕获 ADO错误的代码,这样就可以让浏览器清楚地告诉我们究竟发生了什么。修改后代码如下:

<%

strConnString =“ Provider=SQLOLEDB.1;Password=mypassword;”&“ Persist Security Info=True;User ID=myuid;”&“ Initial Catalog=mydbname;”&“ Data Source=myserver;Connect Timeout=15”

Set conn1 = Server.CreateObject(“ ADODB.Connection” )

Conn1.Open strConnString

’屏蔽浏览器的错误提示功能

on error resume next

q=“ insert into students(xm,xh) values(‘张三’ ,‘ S001’ )”

conn1.Execute (q)

’枚举连接对象 conn1的错误集合并显示每个 Error对象的属性

For Each errLoop In conn1.Errors

strError =“ Error#”& errLoop.Number& vbCr&“”& errLoop.Description& vbCr&“ (Source:”& errLoop.Source&“ )”& vbCr&“ (SQL State:”& errLoop.SQLState&“ )”& vbCr&“ (NativeError:”& errLoop.NativeError&“ )”& vbCr

If errLoop.HelpFile =“” Then

strError = strError&“ No help file available”& vbCr& vbCr

Else

strError = strError&“ (HelpFile:”& errLoop.HelpFile&“ )”& vbCr&“ (HelpContext:”& errLoop.HelpContext&“ )”& vbCr& vbCr

End If

’输出错误信息

Response.Write strError

Next

% >

上述 For~ Next循环中的代码捕获 ADO连接对象 conn1的 Errors集合中的所有错误对象( Error对象)。这些 Error对象的属性包括:

●Number属性表示用于唯一标识 Error对象的数字;

●Description属性表示与 Error对象相关联的说明性字符串;

●SQLState属性表示给定 Error对象的 SQL状态;

●NativeError属性表示给定 Error对象或特定提供者的错误代码;

●Source属性表示产生错误的原始对象或应用程序的名称。

浏览器把这些属性显示在窗口中,这样我们就能清楚地知道究竟发生了什么错误。

在 Error对象的诸多属性中, Description属性包含错误说明信息,查看这一属性,基本上可以知道错误的原因,为简化代码,也可以只查看这一属性。

此外,通过捕获 ADO错误,还可以向用户给出有用的提示信息。例如,当用户录入重复的学号时,我们可以给他合适的提示。代码如下:

<%

’屏蔽浏览器的错误提示功能

on error resume next

strConnString =“ Provider=SQLOLEDB.1;Password=mypassword;”&“ Persist Security Info=True;User ID=myuid;”&“ Initial Catalog=mydbname;”&“ Data Source=myserver;Connect Timeout=15”

Set conn1 = Server.CreateObject(“ ADODB.Connection” )

Conn1.Open strConnString

’检查数据库连接,出错则给出提示

For Each errLoop In conn1.Errors

If errLoop.NativeError=6 then% >

<script language=vbscript>

<!--

alert "数据库可能已停止运行,请和数据库管理员联系!"

//-->

</script>

<% End If

If errLoop.NativeError=0 then% >

<script language=vbscript>

<!--

alert "数据库连接有问题,请和web站点管理员联系!"

window.history.back 1

//-->

</script>

<% End If

Next

q=“ insert into students(xm,xh) values(‘张三’ ,‘ S001’ )”

conn1.Execute (q)

’判断是否存在主键冲突,存在则给出警告

For Each errLoop In cnn1.Errors

If errLoop.NativeError=2627 then% >

<script language=vbscript>

<!--

alert "学好已经存在,请重新输入!"

//-->

</script>

<% End If

Next

% >

这样,就可以通过浏览器提示用户,其操作有什么问题,以利于用户改正。其中错误号表示:

●NativeError=6的错误是由 Net Library返回的错误号,错误来自于底层的网络软件;

●NativeError=0的错误是由驱动程序返回的错误号,错误来自于数据库驱动程序(如 SQL Server Driver);

●NativeError=2627的错误是由 SQL Server返回的错误号,错误来自于数据源。

关于 SQL Server返回的错误信息,如果想获得更详细的信息,请查看 SQL Server 7.0 sysmessages系统表( select error,description from sysmessages)。

……

相关阅读