频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

浅谈asp编程中的测试打印、有效性检查及错误处理

来源: 作者: 出处:巧巧读书 2006-09-16 进入讨论组

     经常看到一些初学ASP的朋友为了测试一个值到处用response.write来打印,

而要看页面效果时再删除这些语句或加上注释,在正式版本出来以前要如此反复

多次。而有些人为了减少麻烦,干脆全当它是正确的,不做测试输出,像这样极

易出现各种各样的问题,最常见的是如果要生成一条sql语句,需要使用变量,如

果不做测试打印,很难做到一次正确,在chinaASP论坛里经常见到这种问题,老

是有人问这条语句为什么会出错等问题,实际上他只要打印出这条语句看一下语

法是否正确就行了,而不必到处追着人问。事实上好的编程习惯应该是在自己没

有很大把握的情况下把生成的语句或变量值打印出来,但这样做又费时费力,有

没有比较好的解决方法呢?
    在C里可以使用 _DEBUG这样的测试开关来控制debug版本和release版本,但

ASP中并没有类似#define这种语句,那么是不是我们就没有办法了呢?其实我们

可以仿照c的这种做法,那就是在global.asa文件里定义一个application变量来

控制,象下面这个例子:

在global.ASP里加上:
application("DEBUG") = 1

然后做这么一个过程:
'--------------------------------------------------------
'Name:            PRINT
'Argument:        a_strPrint:    打印字符串
'Return:        
'Description:    打印(仅在DEBUG状态下运行)
'Hitory:        Create by bigeagle
'--------------------------------------------------------
Sub PRINT(a_strPrint)
    if Application("DEBUG") = 1 then
        Response.Write("<P aling=center>"+a_strPrint+"</P>")
    end if
End Sub

    这个过程的功能就是当测试开关打开时(application("DEBUG") = 1)打印

,而当测试开关关闭(application("DEBUG") = 0)就不会有打印输出了。这样

在程序调试期间,你可以打开测试开关,以观察变量的值,而当要看页面效果或

发布release版本时就可以关闭测试开关,这样所有的测试输出就不会出现在页面

上。

    以上谈到的是变量的测试输出,下面要谈谈正确性检测问题。经常见到很多

人把页面提交过来或数据库取出的值想都不想就用,根本不做正确性检测,那你

怎么能保证这些值的正确性呢?比如有一个input,提交后它的值应该是一个值包

含数字的字符串,但如果用户的输入包含其他字符,若不做正确性检测,那当你

用cint或clng转换时就会发生错误,整个程序崩溃。另外一种情况是这样,当你

从数据库中取值或诸如此类的操作,应该是不会发生问题,但如果出现数据库出

错等问题,那么用户也只能见到一个诸如'odbc错误'等等的提示信息,对于一个

成熟的商品程序来说,这点是很不好的,其实现在包括国内很多知名站点也出现

这种问题。所以应该养成这样一个习惯,那就是任何可能出问题的变量、参数在

使用之前都应该做正确性检测,并且对数据库操作后应当判断否成功。这是就又出现一个版本问题,如果是DEBUG版则应显示出错信息以备修改,而release版则应该引导到一个统一页面,如“本站暂时出现未知故障,请稍候再来"等等,原则上永远不要给用户一个系统出错信息页面。要实现上述功能,请看以下几个函数和过程。

'--------------------------------------------------------
'Name:            ASSERT
'Argument:        a_blnConditon:    断言条件
'                a_FunctionName:    调用函数
'                a_ErrorString:    错误描叙    
'Return:        
'Description:    断言
'Hitory:        Create by Bigeagle
'--------------------------------------------------------
Sub ASSERT(a_blnConditon,a_FunctionName,a_ErrorString)
    if Application("DEBUG") = 0 then
        if a_blnConditon <> TRUE then
           response.redirect("../include/bigerror.ASP")
        end if
    else
        if a_blnConditon <> TRUE then
           call print("断言错误:在<font color=red>" + a_FunctionName + "</font>出现:" + a_ErrorString)
           response.end
            
        end if
            
    end if
    
End Sub

    这个过程的作用是检测变量或参数有效性,如果条件a_blnCondition<>true,那么如果测试开关打开,则显示错误信息,如果测试开关关闭,则重定向到错误处理页面bigerror.ASP。


'--------------------------------------------------------
'Name:            CheckError
'Argument:        
'Return:        
'Description:    检查错误
'Hitory:        Create by Yaozhigang
'--------------------------------------------------------
Function CheckError()
    Dim intErrNumber
    intErrNumber = Err.Number    '保存错误代码,因为在ERROR中将执行Err.Clear
    
    if intErrNumber <> 0 then Call ERROR(-1, "")    'Err错误本U R L:http://www.qqread.com/asp/2006/10/r235076.html 更多文章 更多内容请看数据库处理专题Java编程开发手册专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章