Vb.net 如何继续程序出错

Vb.net 如何继续程序出错,vb.net,Vb.net,我有一个vb.net程序,可以访问10个不同的数据库以获取报告。我在程序结束时使用了一个“Try”语句,通过电子邮件从数据集中发送我用LINQ构建的数据 我遇到的问题是,当我尝试连接到脱机的数据库时,或程序超时、锁定或结束时。我想做的是类似于“On error resume Next(错误恢复下一步)”的事情,但是,我不能用程序中已经存在的try语句来做这件事。。。有什么建议吗?关于vb.net下的错误恢复 Try something() Catch ex As

我有一个vb.net程序,可以访问10个不同的数据库以获取报告。我在程序结束时使用了一个“Try”语句,通过电子邮件从数据集中发送我用LINQ构建的数据


我遇到的问题是,当我尝试连接到脱机的数据库时,或程序超时、锁定或结束时。我想做的是类似于“On error resume Next(错误恢复下一步)”的事情,但是,我不能用程序中已经存在的try语句来做这件事。。。有什么建议吗?

关于vb.net下的错误恢复

    Try
        something()
    Catch ex As Exception
        'do nothing
    End Try

如果这是一个长期代码/生产代码,请尝试找到更好的处理方法,然后在vb.net下继续执行错误恢复

    Try
        something()
    Catch ex As Exception
        'do nothing
    End Try

如果这是一个长期代码/生产代码,请尝试找到更好的方法来处理此问题。不过是用C#

基本上,它是一个处理顶层异常的表达式


但是,您必须确保将每个可能的代码块包装起来,因为异常是结构化的。

在stackoverflow上查看这个答案。不过是用C#

基本上,它是一个处理顶层异常的表达式


但是,您必须确保将每个可能的代码块包装为结构化异常。

从单独的函数调用数据库,该函数在成功与否时返回布尔值。像这样的事情:

Protected Sub Page_Load(sender As Object, e As EventArgs)
Try
            'do something or nothing
    If Not OpenConnecttion() Then
    End If
Catch generatedExceptionName As Exception

    Throw
End Try
端接头

Private Function OpenConnecttion() As Boolean
        'do you database conenction and maybe retrieval stuff here
Try
Catch ex As Exception
    Return False
End Try
Return True
End Function

从一个单独的函数调用数据库,该函数在成功与否时返回一个布尔值。像这样的事情:

Protected Sub Page_Load(sender As Object, e As EventArgs)
Try
            'do something or nothing
    If Not OpenConnecttion() Then
    End If
Catch generatedExceptionName As Exception

    Throw
End Try
端接头

Private Function OpenConnecttion() As Boolean
        'do you database conenction and maybe retrieval stuff here
Try
Catch ex As Exception
    Return False
End Try
Return True
End Function

虽然弗雷多的回答在技术上是正确的,但我建议你稍微调整一下你的计划。而不是

On Error Resume Next
Dim db1 = OpenDbConnection()        ' fails
...do something with db1...         ' more errors, failing silently, occur here
确保仅允许打开数据库的操作失败:

Dim db1 As OleDbConnection          ' or whatever DB library you happen to use
Try
    db1 = OpenDbConnection()
Catch ex As Exception
    Console.WriteLine("Skipping DB1: " & ex.ToString())
End Try

If db1 IsNot Nothing
    ...do something with db1...     ' Errors occuring here *are* reported
End If

这样,您只会忽略代码中某些定义良好的部分中的错误。

虽然Fredou的回答在技术上是正确的,但我建议您稍微重新构造您的程序。而不是

On Error Resume Next
Dim db1 = OpenDbConnection()        ' fails
...do something with db1...         ' more errors, failing silently, occur here
确保仅允许打开数据库的操作失败:

Dim db1 As OleDbConnection          ' or whatever DB library you happen to use
Try
    db1 = OpenDbConnection()
Catch ex As Exception
    Console.WriteLine("Skipping DB1: " & ex.ToString())
End Try

If db1 IsNot Nothing
    ...do something with db1...     ' Errors occuring here *are* reported
End If


这样,您只会忽略代码中某些定义良好的部分中的错误。

这是用什么语言编写的?这两个标记都合适吗?“我不能用程序中已有的try语句来做这件事”-为什么不使用其他
try
语句?@FrankTudor-这是一种可怕的做法。@Oded这是该人问的。我们在这里不是在重新考虑…但教学和展示正确的方式是。这是用什么语言表达的?这两个标记都合适吗?“我不能用程序中已有的try语句来做这件事”-为什么不使用其他
try
语句?@FrankTudor-这是一种可怕的做法。@Oded这是该人问的。我们在这里不是在重新分解…但教学和展示正确的方式是。@Oded,问题是,下一步如何模拟错误恢复,如果我没记错的话,这是VB6的行为,但向某人展示一个非常糟糕的实践作为解决方案并不适合我。+1。是的,这是非常糟糕的做法,但我们不应该惩罚回答问题的人而不是批评它。@Oded,我在我的回答中加了一个小注释,
ex作为例外
可以省略,如果你不使用
ex
。(当然,通常你应该对它做些什么,即使它只是记录错误。)@Oded,问题是,下一步如何模拟错误恢复,如果我没记错的话,这是VB6的行为,但向某人展示一个非常糟糕的做法作为解决方案并不适合我。+1。是的,这是非常糟糕的做法,但我们不应该惩罚回答问题的人而不是批评它。@Oded,我在我的回答中加了一个小注释,
ex作为例外
可以省略,如果你不使用
ex
。(当然,通常您应该对它做些什么,即使它只是记录错误。)