处理具体的错误
上面例子的类属特性说明了如何处理错误,但是没有提供关于其发生的有用信息。所有的错误都来自System命名空间的Exception类,这个类能够被用来显示和错误相关的具体信息。前面的catch块能够被记录下来,以显示和特定错误相关的具体信息,就像下面这样:
Catch ex As System.Exception
Console.WriteLine("An error has occurred: " + ex.Message())
Console.WriteLine("At: " + ex.Source())
Console.WriteLine(ex.Stacktrace())
这个异常类有很多方法,但是我们用到了下面几个:
* Message:描述当前异常的消息
* Source:发生当前异常的方法/应用程序
* Stacktrace:和当前异常相关的堆栈追踪
这些方法能够让你轻易地取得和显示同错误相关的信息。你可能不想向用户显示这些信息,所以它可以被很轻易地取得,并保存在日志、数据库,或者合适的地方。
Exception类是基本的.NET错误类。会存在一些具体的异常类,但是它们并不都来自Exception类。例如,示例代码可以经修改来处理具体的SQL错误。SqlClient类包括了SqlException对象以处理专门针对它的错误。可以加入另一个Catch块来处理针对SQL的错误:
Catch ex As System.Data.SqlClient.SqlException
Console.WriteLine("A SQL error occurred: " + ex.Message())
Console.WriteLine("At: " + ex.Source())
你自己来制造异常
你的代码可以在.NET异常发生的时候捕捉任何异常,但是你也可以自己来引发异常。这要用throw陈述式来实现。
Throw陈述式允许在必要的时候引发异常。它的句法如下:
VB.NET
Throw New Exception_Class()
C#
throw new Exception_Class();
你可能需要在代码执行过程中触发一个异常,从而让某个特定的错误发生,而throw陈述式就能让这成为可能。当从数据库里没有读到数据的时候,throw陈述式能够被用在示例代码里来中止执行。它能够和if陈述式组合起来,检查SqlDataReader对象的状态:
If (dr Is Nothing) Then
Throw New System.Exception()
End If
把这段代码放在第一个代码列表里,(如果在执行期间)没有数据被读取就会触发一个错误,而代码执行就被传给相应的catch块。Throw陈述式可以和自定义的异常(来自Exception类)组合起来,以创建更加强健的错误处理(机制)。
小心处理
错误的发生不会在乎开发人员的技术水平。.NET框架通过结构化的异常处理,简化了对不可预见问题的处理过程。这就让错误能够被顺利的处理。此外,错误也能够在代码里触发以模拟其他问题发生时的异常。
Tony Patton的职业生涯开始于应用程序开发员,并已经获得了Java、VB、Lotus和XML的认证,以增加其专业知识。
