2013-04-30 72 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