科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在VB 2005中定制自己的异常

在VB 2005中定制自己的异常

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

     提要 本文在简要分析VB 2005所提供的异常处理机制的同时,详细讨论如何用它所提供的异常类定制自己的异常。   结构化异常处理是随着.net的第一个版本的发行而加入到Visual Basic语言中的。

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  



  六、 定制异常:CustomerNotFoundException

  第一个定制异常类是CustomerNotFoundException。当你试图在你的数据库中查找一个客户但未找到相应的匹配时你会抛出这个异常。实现代码如下所示:

Public Class CustomerNotFoundException
Inherits DatabaseException
Private m_CustomerID As Long
Public ReadOnly Property CustomerID() As Long
Get
 Return m_CustomerID
End Get
End Property
Public Sub New(ByVal customerID As Long)
 MyBase.New("Customer ID was not found.")
 m_CustomerID = customerID
End Sub
End Class


  这个类继承自你前面所创建的DatabaseException基类。它仅包含一个构造器--其参数为customerID。当调用这个构造器时,你把文本串"Customer ID was not found."传递到基类的构造器以用作Message属性。你还有一个已定义的只读属性CustomerID。你将使用这个CustomerID属性来存储要被作为一个参数传递的CustomerID的值。它是一个只读属性,因为把这个值改变为除了引发异常的值以外的值并没有什么意义。

七、 定制异常-DatabaseUnavailableException

  第二个定制异常类是DatabaseUnavailableException。当你想连接到一个数据库并发生一个异常时,你就抛出这个异常。其实现代码如下:

Public Class DatabaseUnavailableException
Inherits DatabaseException
Public Sub New(ByVal ex As Exception)
 MyBase.New("The database is not available.", ex)
End Sub
End Class

  这个类非常相似于你的CustomerNotFoundException类。你不用为这个类定义任何其它属性,但是它们的主要区别在于,它把一个System.Exception作为一个参数并且把它传递到你的基类的构造器中。这个System.Exception参数将成为你的DatabaseUnavailableException的InnerException属性。

  八、 Customer类

  Customer类是一个简单类,这个类的构造器使用一个数据库名和一个CustomerID作为参数并且负责检索该顾客相应的数据。该构造器要做的第一件事情是,通过使用ConnectDB方法尝试建立到数据库的连接。具体代码如下:

Private Sub ConnectDB(ByVal database As String, _
 ByRef cn As OleDbConnection)
 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; _
 Data Source=" & _
"""" & database & """"
 Try
  cn.Open()
 Catch ex As Exception
  Throw New DatabaseUnavailableException(ex)
 End Try
End Sub

  你试图在一个Try语句内打开数据库连接。如果抛出任何异常的话,你就会捕获它并抛出一个DatabaseUnavailableException-这个异常用它的InnerException属性包装了原始的异常。

  如果你成功地连接到数据库,那么你就试图使用GetCustomer方法来检索相应于指定CustomerID的数据,详见下面的代码:

Private Sub GetCustomerData(ByVal cn As OleDbConnection, _
 ByVal customerID As Long)
 Dim cmd As New OleDbCommand
 Dim reader As OleDbDataReader
 cmd.Connection = cn
 cmd.CommandText = "SELECT * FROM CUSTOMER WHERE ID = " _
& customerID
 reader = cmd.ExecuteReader
 If reader.HasRows Then
  reader.Read()
  m_id = reader.Item("ID")
  m_firstname = reader.Item("Firstname")
  m_lastName = reader.Item("Lastname")
  m_street = reader.Item("Street")
  m_city = reader.Item("City")
  m_state = reader.Item("State")
  m_zipCode = reader.Item("Zip")
 Else
  Throw New CustomerNotFoundException(customerID)
 End If
End Sub

  上面的代码中,你执行了一个SQL查询--其中使用CustomerID来指定你想要检索哪个顾客的数据。如果查询返回一个结果,那么你使用从该查询返回的值设置Customer类的属性。但是,如果你没有得到任何值的话,你将使用customerID作为构造器的参数抛出一个CustomerNotFoundException异常。这个值将用于设置你的CustomerNotFoundException对象的CustomerID属性。

  九、 运行应用程序

  下面的屏幕快照显示了你的应用程序的运行情况。为了运行该应用程序,你可以从命令行上调用它并指定一个数据库名和CustomerID作为参数。第一个屏幕快照显示了一个成功的查询(见图1),第二个屏幕快照抛出一个CustomerNotFoundException异常(见图2),第三个屏幕快照抛出一个DatabaseNotAvailableException异常(见图3)。


图1.成功的查询

图2.CustomerNotFoundException

图3.DatabaseUnavailableException

  十、 总结

  定制异常类型是VB.net语言中的一个非常有力的特征。.NET框架提供了许多标准的异常类型,对于大多数应用而言,已经足够了。事实上,你可能会很少用到标准异常之外的东西;但是,特殊情况下定制自己的异常会提高你的应用程序的健壮性。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章