欢迎光临
我们一直在努力

提高浏览器的调试能力

建站超值云服务器,限时71元/月

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)。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 提高浏览器的调试能力
分享到: 更多 (0)