【发布时间】: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