2016-07-14 113 views
0

所以我創建了一個函數,允許用戶使用SQL語句從excel文件中收集數據。下面是函數:如果SQL語句不好,如何在Excel中錯誤地處理OLEDBB連接?

Public Function query_excel_file(ByVal filepath As String, ByVal sql_statement As String) As DataTable 
    On Error Resume Next 
    Dim m_sConn1 As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
      "Data Source=" & filepath & ";" & _ 
      "Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";" 


    Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1) 
    Dim da As New System.Data.OleDb.OleDbDataAdapter(sql_statement, conn1) 
    Dim dt As DataTable = New DataTable 
    If da Is Nothing Then 
     Return Nothing 
     Exit Function 
    End If 

    da.Fill(dt) 

    conn1.Close() 

    Return dt 

End Function 

現在,這個功能工作完全正常,如果sql_statement是一個有效的SQL語句,但是如果它不是,那麼我得到這樣一個錯誤:

enter image description here

我完全意識到這個錯誤來自一個錯誤的sql語句。我的問題不是如何解決sql語句,而是爲了處理錯誤,以便錯誤對話框不會彈出或崩潰程序。

我已經試過

我已經嘗試添加上面顯示的條款:

If da Is Nothing Then 
     Return Nothing 
     Exit Function 
    End If 

但錯誤仍然會出現。我試着看看我的變量da的屬性,它是一個System.Data.OleDb.OleDbDataAdapter,以查看是否有任何屬性要引用一個錯誤,但也沒有運氣。

我也曾嘗試使用簡單的嘗試捕捉結束嘗試,並在錯誤繼續下一步,但仍然出現的對話框。

+2

Try Catch是要走的路,Try Catch錯誤處理程序的嘗試是什麼? – Steve

+0

我試圖從開始是將整個功能完成以及剛剛高亮部分在錯誤發生,但問題仍然即使有 –

+0

取消選中「當這個異常類型拋出箱破發」出現。這應該允許你的try-catch來處理錯誤。 – TnTinMn

回答

2

這是「第一次機會」異常對話框,它是由異常發生時由Visual Studio生成的,之前發生的任何其他錯誤處理。

這是從你的程序的錯誤處理完全獨立,和Visual Studio之外運行程序時(因爲它是由的Visual Studio生成),它不會發生。

您可以通過取消勾選框關閉對話框。這是而不是忽略錯誤,它只是停止Visual Studio發生時暫停。

然後,執行適當的異常處理,在這個時代是Try .. Catch(遠離On Error Resume Next)。

如果你把一個消息框,在你Catch塊和運行代碼,你會看到錯誤正確捕獲並不僅僅是忽略。