【问题标题】:How to error handle OLEDBB connection to Excel if SQL statement is bad?如果 SQL 语句错误,如何错误处理与 Excel 的 OLEDBB 连接?
【发布时间】:2016-11-17 19:37:00
【问题描述】:

所以我创建了一个函数,允许用户使用 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_statement 是有效的 sql 语句,则此函数可以正常工作,但如果不是,则我会收到如下错误:

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

我的尝试

我已尝试添加如上所示的子句:

    If da Is Nothing Then
        Return Nothing
        Exit Function
    End If

但错误仍然出现。我尝试查看我的变量 da 的属性,它是一个 System.Data.OleDb.OleDbDataAdapter,以查看是否有任何属性可以在错误时引用,但也没有运气。

我也尝试过使用简单的 Try Catch End Try, and On Error Resume Next 但对话框仍然出现。

【问题讨论】:

  • Try Catch 是可行的方法,您对 Try Catch 错误处理程序的尝试是什么?
  • 我尝试从头到尾封装整个函数以及发生错误的突出显示部分,但即使存在错误仍然出现
  • 取消选中“抛出此异常类型时中断”框。这应该允许您的 try-catch 处理错误。
  • 好的,但是如果您在VS环境之外运行应用程序(运行编译的exe),您仍然会得到异常吗?请注意,您设置了该标志:抛出此异常类型时中断意味着无论您在异常周围有什么,VS 环境都会停止。更多信息在这里stackoverflow.com/questions/10506695/…
  • 使用Try Catch 会起作用。不要不要使用On Error Resume Next。该对话框来自 Visual Studio,而不是您的程序。它只是通知您发生了异常,并在您的catch 代码执行之前弹出。您可以点击继续,您的 catch 块将执行。如果您不想再次看到该对话框,只需取消选中该框即可。

标签: sql vb.net visual-studio


【解决方案1】:

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

它与您的程序的错误处理完全分开,并且在 Visual Studio 之外运行您的程序时不会发生这种情况(因为它是由 Visual Studio 生成的)。

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

然后,实施适当的异常处理,在这个时代是Try .. Catch(远离On Error Resume Next)。

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

【讨论】:

    猜你喜欢
    • 2015-09-24
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2020-02-21
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-02
    相关资源
    最近更新 更多