当前位置:编程学习 > asp >>

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

答案:     经常看到一些初学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错误的错误码为-1
  
   CheckError = intErrNumber
  End Function
  
  
  ''--------------------------------------------------------
  ''Name: ERROR
  ''Argument: a_intErrCode:错误码(-1时表示是系统错误,即Err.Number<>0)
  '' a_strErrText:错误描述
  ''Return:
  ''Description: 错误处理
  ''Hitory: Create by Yaozhigang
  ''--------------------------------------------------------
  Sub ERROR(a_intErrCode, a_strErrText)
  
   Dim strMsg
   Dim strLogMsg
  
   ''如果是Err错误,则一定执行错误页
   if a_intErrCode = -1 then
  
   strMsg = strMsg + "*********************************************************************************************" + "<BR>"
   strMsg = strMsg + "错误时间:" + CStr(Now()) + "<BR>"
   strMsg = strMsg + "错误类型:Err错误" + "<BR>"
   strMsg = strMsg + "错误号 :" + CStr(Err.Number) + "<BR>"
   strMsg = strMsg + "错误源 :" + Err.Source + "<BR>"
   strMsg = strMsg + "错误描述:" + Err.Description + "<BR>"
   strMsg = strMsg + "*********************************************************************************************" + "<BR>"
  
   strLogMsg = strLogMsg + "*********************************************************************************************" + Chr(13) + Chr(10)
   strLogMsg = strLogMsg + "错误时间:" + CStr(Now()) + Chr(13) + Chr(10)
   strLogMsg = strLogMsg + "错误类型:Err错误" + Chr(13) + Chr(10)
   strLogMsg = strLogMsg + "错误号 :" + CStr(Err.Number) + Chr(13) + Chr(10)
   strLogMsg = strLogMsg + "错误源 :" + Err.Source + Chr(13) + Chr(10)
   strLogMsg = strLogMsg + "错误描述:" + Err.Description + Chr(13) + Chr(1

上一个:ASP中常见的错误80004005信息
下一个:ASP技巧

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,