如果SQL语句错误,如何处理与Excel的OLEDBB连接错误?

如果SQL语句错误,如何处理与Excel的OLEDBB连接错误?,sql,vb.net,visual-studio,Sql,Vb.net,Visual Studio,因此,我创建了一个函数,允许用户使用SQL语句从excel文件收集数据。以下是该功能: 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;" & _

因此,我创建了一个函数,允许用户使用SQL语句从excel文件收集数据。以下是该功能:

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_语句是有效的sql语句,则此函数可以正常工作,但是如果不是,则会出现如下错误:

我完全意识到这个错误来自一个错误的sql语句。我的问题不是如何修复sql语句,而是如何处理错误,以便不会弹出错误对话框或使程序崩溃

我尝试过的

我已尝试添加上述条款:

    If da Is Nothing Then
        Return Nothing
        Exit Function
    End If
但错误仍然存在。我曾尝试查看变量da的属性,该变量是System.Data.OleDb.OleDbDataAdapter,以查看是否有任何错误属性可引用,但也没有成功

我也尝试过使用一个简单的Try-Catch-End-Try,然后在出现错误时继续下一步,但对话框仍然出现。

这是“第一次机会”异常对话框,它是在发生异常时由Visual Studio生成的,在发生任何其他错误处理之前

它完全独立于程序的错误处理,在Visual Studio之外运行程序时不会发生这种情况(因为它是由Visual Studio生成的)

您可以通过取消选中该框来关闭该对话框。这并没有忽略错误,它只是在错误发生时阻止VisualStudio暂停

然后,实施适当的异常处理,这在当今时代是
Try
<代码>捕获(在下一步继续出错时远离

如果在
Catch
块中放置一个消息框并运行代码,您将看到错误被正确捕获,而不是被忽略。

这是“第一次机会”异常对话框,在发生异常时,Visual Studio会在发生任何其他错误处理之前生成该对话框

它完全独立于程序的错误处理,在Visual Studio之外运行程序时不会发生这种情况(因为它是由Visual Studio生成的)

您可以通过取消选中该框来关闭该对话框。这并没有忽略错误,它只是在错误发生时阻止VisualStudio暂停

然后,实施适当的异常处理,这在当今时代是
Try
<代码>捕获
(在下一步继续出错时远离


如果您在
Catch
块中放置一个消息框并运行代码,您将看到错误被正确捕获,而不是被忽略。

Try-Catch是一种方法,您对Try-Catch错误处理程序的尝试是什么?我尝试从开始到结束封装整个函数,以及仅封装发生错误的突出显示部分,但即使出现错误,仍然会出现错误。请选中“当抛出此异常类型时中断”框。这应该允许您的try-catch处理错误。好的,但是如果您在VS环境之外运行应用程序(运行编译的exe),您仍然会收到异常吗?请注意,您已经设置了该标志:当抛出此异常类型时,break意味着无论您在异常周围有什么,VS环境都会停止。使用
Try Catch
可以获得更多信息。不要在错误时使用
下一步继续
。该对话框来自Visual Studio,而不是您的程序。它只是通知您发生了异常,并在执行
catch
代码之前弹出。您可以点击continue,您的
catch
块将执行。如果不想再次看到该对话框,只需取消选中该框。Try-Catch是一种方法,您对Try-Catch错误处理程序的尝试是什么?我尝试从开始到结束封装整个函数,以及仅封装发生错误的突出显示部分,但即使如此,错误仍然会出现。请检查“抛出此异常类型时中断”框。这将允许您的try-catch处理错误。确定,但如果您在VS环境之外运行应用程序(运行已编译的exe)您仍然获得异常吗?请注意,您已经设置了该标志:当抛出此异常类型时,break意味着无论您在异常周围遇到什么情况,VS环境都将停止。此处使用
Try Catch
的更多信息将起作用。不要在下一次错误恢复时使用
。该对话框来自Visual Studio,而不是您的程序。它只是通知您发生异常,并在执行
catch
代码之前弹出异常。您可以单击“继续”,然后执行
catch
块。如果不想再次看到该对话框,请取消选中该框。