当前位置:编程学习 > C#/ASP.NET >>

ASP.net(VB)编程入门进阶[基础篇四]

答案:应用程序跟踪和错误处理
是不是你经常在aspx对页面出现的错误措手不及,的确,我也是,特别是当弹出一大段的东西,一个字,烦,有些错误由于解释的太专业或者E文不够好,不能完全理解,这里我就随便说说应用程序跟踪和错误处理吧,希望对您有所帮助。

ASP.net应用程序可能出现的4中主要错误是:

1:配置错误--由web.config或machine.config文件中的问题造成的错误
2:解析器错误--是asp.net页面中的错误语法造成的错误。
3:编译错误----是visual basic编译器引发的错误
4:运行期错误---当页面实际执行时检测到的错误。

如果需要查看详细的错误信息,需要禁用自定义错误或者将次模式设置为remoteonly,可以在machine.config或某个应用程序的web.config文件中配置自定义错误的模式,例如:
<configuration>
<system.web>
<customErrors mode="Off">
</system.web>
</configuration>

当自定义模式为off时,总是显示详细的错误信息,甚至在远程机器上显示。
开启asp.net页面的调试模式有两种办法,可以在一个web.config文件中为一个目录中的启用调试模式或者使用page指令启动。
<%@ page debug="true"%>

或者把上面的web.config文件放在应用程序的根目录中。

页面级错误处理

下面我写写如何使用visual try...catch语句包围错误代码中的危险语句,下面看看使用page_error子例程捕捉和相应页面中发生的未处理的错误。
1:try.............catch捕捉异常。
<%@ Page Language="VB" %>
<%@ import Namespace="system.data" %>
<%@ import Namespace="system.data.oledb" %>
<script runat="server">

    sub   page_load(s as object ,e as eventargs)
        dim conn as oledbconnection
        dim strselect as string
        dim ascmd as oledbcommand
        conn = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=d:\web\web\net\data\db.mdb")
        strselect = "select * from site_n"
        ascmd= new oledbcommand (strselect, conn)
try
        conn.open()
        txt.datasource = ascmd.executereader()
		txt.databind()
        conn.close()
catch
	   response.write("we are sorry,we are experiencing technical problem...")
end try
     end sub
</script>
<html><head><title></title></head><body>  <asp:datagrid id="txt" runat="server" /> </body></html>

这里,我们try............catch............end try了我们认为有可能出现问题的代码。
如果,我把这个数据库的表名改称不存在的,就在浏览器出现如下错误(我们在代码中定义的):
 we are sorry,we are experiencing technical problem...


这样的错误是不是太简单了?ok,来点详细的吧,如果需要在catch块中获取错误信息,可以捕捉引发该错误的异常,在.net框架中,异常是用exception(除外, 例外, 反对, 异议)类的实例代表的,这个类包括一下属性:
1:message---------返回一个代表错误消息的字符串
2:source--返回一个代表造成此错误发生前调用的方法的字符串
3:stacktrace---返回一个代表错误发生前调用的方法的字符串
4:targetsite-----返回一个代表造成此错误的方法的methodbase的对象

下面我就改改上面给出的例子,把上面的catch后面到end try 改为:
response.write("the file is not right server:<br/>")
response.write("<li>message:" & objexception.message)
response.write("<li>source:" & objexception.source)
response.write("<li>stack trace:" & objexception.stacktrace)
response.write("<li>target site:" & objexception.targetsite.name)

还是故意把数据库的表的名称改错。
出现的错误:
the file is not right server:

message:Microsoft Jet 数据库引擎找不到输入表或查询 'site_ns'。 确定它是否存在,以及它的名称的拼写是否正确。
source:Microsoft JET Database Engine
stack trace: at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader() at ASP.p591_aspx.page_load(Object s, EventArgs e)
target site:ExecuteCommandTextErrorHandling 

返回一个很详尽的错误描述。

2。捕捉页面未处理的异常

只需加上page_error子例程就行
sub page_error
response.write"sorry"
end sub


应用程序级错误保护

其实是获取浏览器的statuscode的值,然后重定向。
web.config:
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="apperror.aspx" >
<error statusCode="404" redirect="notfound.aspx" />
</customErrors>
</system.web>
</configuration>



当文件不存在的时候就重定向到nofound.aspx,总比asp里面好用了吧,呵呵。

另外,可以跟踪和监视应用程序,获取进程信息,记录事件,使用调试器,逐步执行等n多的错误机制调整,当然,这些都是比较高级的技术了,留给我以后慢慢的写吧,这里不再累赘。

下面我就来实例了,不再说具体的理论了,基本还是上面讲到过的技术。当然,这只是一个入门级的教程,代码等仅仅可以作为初学者的参考,和真正的.net相差甚远,但这点基础不掌握牢固的话还谈什么高级技巧?
[page_break]

名称:快速入门
地址:http://chs.gotdotnet.com/quickstart/
描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例程序,直接在网上查看此示例即看。

名称:微软官方.NET指导站点
地址:http://www.gotdotnet.com/
描述:上面的站点是本站的一个子站点,本站点提供微软.NET官方信息,并且有大量的用户源代码、控件下载,微软.NET开发组的人员也经常在此站点发表一些指导性文章。

名称:SourceForge
地址:http://www.sourceforge.net
描述:世界上最大的Open Source项目在线网站,上面已经有.NET的各种大型Open Source项目上千件,包括SharpDevelop、NDoc、Mono等都是在此站点发布最新源代码信息。

名称:CodeProject
地址:http://www.codeproject.com
描述:很多非官方的中小型示例源代及文章,相当全面,基本上我们想要的各种方面的资料都可以在此处查找。

名称:Fabrice's weblog
地址:http://dotnetweblogs.com/FMARGUERIE/Story/4139.aspx
描述:这是一个WebLog形式的在线日志网站,定期更新,包括.NET相关的工具、混淆器、反编译器等各种信息,十分值得收藏。

名称:
地址:http://www.aspalliance.com/aldotnet/examples/translate.aspx
描述:c#翻译为vb.net,提供一个文本框,将你的C#源代码贴进去,就可以帮你翻译成VB.NET语法。

名称:CSharpHelp
地址:http://www.csharphelp.com
描述: 专业的C#语言在线帮助网站,主要提供C#语言方面的技术文章。专业性很强。

名称:DotNet247
地址:http://www.dotnet247.com
描述:最好的索引网站,分别按照门类及命名空间的索引,也提供了Microsoft KB知识库。

名称:ASP.NET
地址:http://www.asp.net
描述:微软.NET webform的老巢,资料和实例代码都非常难得。

名称:微软.NET Winform
地址:http://www.windowsforms.net/
描述:微软.NET Winform的老巢。

名称:微软 KnowledgeBase
地址:http://support.microsoft.com/
描述:微软知识库,开发的时候遇到的怪问题,可能会在这里找到答案。

名称:MSDN
地址:http://msdn.microsoft.com/
描述:这个就不用多说了吧,虽然出了中文MSDN,但是资料还是不够全,英文的就什么都有了。

名称:HotScripts
地址:http://www.hotscripts.com/
描述:Welcome to HotScripts.com, the net’s largest PHP, CGI, Perl, javascript and ASP script collection and resource web portal. We currently have 24,004 scripts across 11 different programming languages and 1,240 categories, as well as links to books, articles, as well as programming tips and tutorials.

名称:ASPAlliance
地址:http://www.aspalliance.com/
描述:提供相当丰富的文章和示例代码,思路匮乏的时候可以找找思路

名称:CSDN文档中心
地址:http://dev.csdn.net/
描述:中文的,资料还算丰富,可以作为国内首选。

名称:DOTNET中

上一个:asp实现无限级分类的方法js版
下一个:ASP.net(VB)编程入门进阶[基础篇一]

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,