我逐步完成这段代码,发现该函数不仅没有被调用,而且myBase.Load的其余部分永远不会完成这里发生的事情。
现在显示所有外部参考。程序永远不会碰到**中包围的行,并且会将frmMain_Load作为第一项运行。逐步图标确实落在以reader =开头的行上,但从不调用runAsIsQuery(断点不会捕获并且逐步消失)。然后它向我显示frmMain没有从frmMain_Load或runAsISQuery处理任何其他代码
Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
sqlstring = "SELECT Nickname FROM tblBikeInfo"
reader = sql.runAsIsQuery(cnn, sqlstring) 'never fires
**If 1 = 1 Then**
'ummmm never comes back here either
End If
有关其他参考文献的详细信息,请参阅frmMain作为全球变量
Dim reader As OleDbDataReader
Dim sql As OLEDB_Handling 'custom class
Public cnn = MotorcyleDB.GetConnection
Custom Class(OLEDB_Handling)中的函数
**Public Function runAsIsQuery(connection As OleDbConnection, SQL As String) As OleDbDataReader**
Dim reader As OleDbDataReader
Dim command As New OleDbCommand(SQL)
command.Connection = connection
Try
connection.Open()
reader = command.ExecuteReader()
Return reader
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Function
名为(MotorcyleDB)的连接字符串类
Public Shared Function GetConnection() As OleDbConnection
Return New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\************\Documents\Visual Studio 2010\Projects\MotorcycleMinder\MotorcycleMinder\MotorcycleServiceLog11.accdb")
End Function
答案 0 :(得分:2)
我发现了这个: http://blog.adamjcooper.com/2011/05/why-is-my-exception-being-swallowed-in.html
这是该网站的摘录。
如果满足以下条件:
- 您运行的是64位版本的Windows(无论您的应用程序是针对32位还是64位构建都无关紧要;只有位 OS的深度)
- 您正在构建WinForms应用
- 您正在使用Visual Studio调试应用程序(使用默认值 异常捕获的选项)
- 您的主窗体有一个Load事件处理程序
- 在执行Load处理程序期间,会发生异常
醇>然后:
系统会默默地吞下异常,而你的 处理程序不会继续执行,您的应用程序将继续 如果你将处理程序代码包装在try / catch块中,你可以 仍明确捕获任何抛出的异常。但如果你不这样做,你会 永远都不知道出了什么问题。
请注意,必须满足所有条件。例如,如果您运行 没有调试的应用程序,然后仍然是未处理的异常 被正确抛出。
网站上还有一种解决方法。但是我会把代码放在try catch块中,或者把整个东西放在Initializer / Constructor中。