2013-04-30 61 views
1

我逐句通过此代码,发现该函数不仅未被调用,而且myBase.Load的其余部分从未完成此处发生的事情。mybase.load在调用函数时停止加载vb.net

现在显示所有外部参考。程序不会击中**中包围的行,并且会将frmMain_Load作为第一项运行。穿越图标确实落在以读者=开头的行上,但从未调用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 

功能从自定义类(OLEDB_Handling )称为(MotorcyleDB)

**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 

连接字符串类

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 
+1

您需要提供比我们更多的知识。如何创建读者,如何创建sql,如何创建cnn,如果代码放置在try catch块中会发生什么?您是否尝试过使用RunQuery运行查询? – WozzeC 2013-04-30 10:38:32

+0

尝试调用runAsIsQuery的行会生成异常。因为你没有异常处理,所以它正在退出。要么绕过Try..Catch捕捉异常,要么更改调试器的Break On设置。 – RBarryYoung 2013-04-30 21:05:46

+0

好吧,我oledbexcpetion赶上我的本地副本,它似乎是不够的。现在我把一个通用的捕获它确实有效地赶上...现在我得到空ref参考例外..我可以处理..很好的经验教训。现在我可以向我的老教师展示这件事,我请求帮助(谁也不能回答),谢谢大家。 – Skwiggs 2013-05-01 01:29:55

回答

2

我发现这一点: http://blog.adamjcooper.com/2011/05/why-is-my-exception-being-swallowed-in.html

这是该网站的一个片段。

如果这些条件得到满足:

  1. 要在Windows的64位版本上运行(您的应用程序是否专为32位或64位没有关系;只有位 深度OS的)
  2. 您(使用默认的例外选项 捕)
  3. 你迈构建WinForms应用程序
  4. 您正在调试与Visual Studio的应用氮素形态有Load事件处理程序
  5. 您的负载处理程序的执行过程中,发生异常时

然后:

的异常将被系统默默吞下,而你的 处理程序将不继续执行,您的应用程序将继续运行 。如果将处理程序代码包装在try/catch块中,则您仍可以明确捕获任何抛出的异常。但是,如果你不这样做,你将永远不知道什么地方出了问题。

请注意,必须满足所有条件。例如,如果您在没有调试的情况下运行 应用程序,则正确抛出未处理的异常仍然 。

该网站上还有一个解决方法。但是我会把代码放在try catch块中,或者把整个东西放在Initializer/Constructor中。

+0

WozzeC是正确的。这里是关于这个主题的另一个讨论http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/a0016d16-9fac-4bd8-88de-b2959b1827e9 – dbasnett 2013-04-30 11:59:29

+0

我继续把函数调用放入trycatch阻止并且仍然没有发生。我知道这个函数没有错误,因为当使用F8来遍历Load的时候,函数永远不会被调用,只是停下来,并且像使用frmMain_Load完成一样。我会继续阅读网站,但仅供参考,功能本身从未被触及。我会继续前进,并填充所有引用到我的问题,但那么你将不得不让我在秘密的非调用代码如何影响任何东西:) – Skwiggs 2013-04-30 16:10:31

+0

@WozzeC问题更新与您要求的代码,我已经添加更多的细节,希望能够说明为什么我相信它不能是一个例外(除非你可以通过调用另一个类中存在的函数来引发异常...但是我怎样才能把trycatch放在那里?) – Skwiggs 2013-04-30 16:50:52