给出类似的代码:
Try
Try
'Code that throws an OleDBException
Catch dbEx as System.Data.OleDb.OleDbException
Console.WriteLine("Inner Specific Exception handler.")
Dim newEx As New System.Exception("Database Error Handled.", dbEx)
Throw newEx
Catch ex as Exception
Console.WriteLine("Inner Generic Exception handler.")
End Try
Catch ex as Exception
Console.WriteLine("Outer Generic Exception handler.")
End Try
这段代码已经缩减了很多,实际的实现更多地使用OleDBException
然后丢失堆栈跟踪但我的问题是,当抛出OleDbException
时将写入控制台的内容?
我希望看到:
Inner Specific Exception handler.
Inner Generic Exception handler.
但我认为它实际上会输出:
Inner Specific Exception handler.
Outer Generic Exception handler.
或者是否有人知道一种确定的火力方式会导致OleDbException
一直被抛出,所以我可以自己测试一下?
答案 0 :(得分:0)
你不能轻易抛出OleDBException,因为它说不能访问友元构造函数,但为什么不用更简单的异常类型测试呢?异常类型不会对您的测试产生影响。
Try
Try
Throw New ArgumentException("Throwing up!")
'Code that throws an OleDBException
Catch dbEx As ArgumentException
Console.WriteLine("Inner Specific Exception handler.")
Dim newEx As New System.Exception("Database Error Handled.", dbEx)
Throw newEx
Catch ex As Exception
Console.WriteLine("Inner Generic Exception handler.")
End Try
Catch ex As Exception
Console.WriteLine("Outer Generic Exception handler.")
End Try
答案 1 :(得分:0)
看来OleDbException类的构造函数不是公共的,所以你可能无法自己抛出一个。
但是,您可以通过您知道将失败的OleDB连接执行查询来实现您的目标。例如:
SELECT NoColumn FROM NoTable
应该这样做,除非你不幸得到一张名为" NoTable"使用名为" NoColumn"的列。 :)